2010-07-28 2 views
3

Добрый день всем,Как я могу прочитать определенные столбцы данных из файла в с

Я новичок в С programming.I имеют эту проблему и провели довольно большое количество времени на нем без каких-либо существенных прогресс.

Моя задача формулируется следующим образом:

У меня есть ряд файлов с расширением (.msr), они содержат численные значения измеряются более, что десять параметров, которые колеблются от даты, времени, температур, давления,. ... которые разделены точкой с запятой. Примеры значений данных приведены ниже.

2010-03-03 15:55:06; 8.01; 24.9; 14.52; 0.09; 84; 12.47; 
2010-03-03 15:55:10; 31.81; 24.9; 14.51; 0.08; 82; 12.40; 
2010-03-03 15:55:14; 45.19; 24.9; 14.52; 0.08; 86; 12.32; 
2010-03-03 15:55:17; 63.09; 24.9; 14.51; 0.07; 84; 12.24; 

Каждый из файлов имеет как имя REG_2010-03-03, REG_2010-03-04, REG_2010-03-05, ... и все они содержатся в одном файле.

  1. Я хочу, чтобы извлечь из каждого файла информацию о дате, которая в данном случае 2010-03-03, колонки 3 и колонки 6.

  2. Найти статистический среднее значение каждого из столбцов от 3 и 6.

  3. Затем сохраните результаты в новом файле, который будет содержать только дату и вычисленное среднее из столбцов выше для дальнейшего анализа.

Они должны быть написаны в c.

Я действительно рассчитываю или ваша помощь, чтобы это произошло.

Привет

+7

Какой код C вы уже написали? – 2010-07-28 10:35:51

+1

пахнет домашней работой ... – rubenvb

+2

Почему бы не использовать awk для этого? – Muxecoid

ответ

0

sscanf может быть начальной точкой. Сначала вам нужно будет прочитать каждую строку в строке и использовать sscanf для получения требуемых параметров, которые разделены пробелом в этой строке.

/* sscanf example */ 
#include <stdio.h> 

int main() 
{ 
    char sentence []="Rudolph is 12 years old"; 
    char str [20]; 
    int i; 

    sscanf (sentence,"%s %*s %d",str,&i); 
    printf ("%s -> %d\n",str,i); 

    return 0; 
} 

Выход

Rudolph -> 12 

Там может быть лучше и более простые способы сделать это, который я уверен, будет отвечать здесь на SO.

EDIT:

Ofcourse вы также можете разобрать каждую строку, используя strtok или strtok_r (возвратный версию strtok). Ознакомьтесь с примерами в ссылке, чтобы получить представление.

2

Вот отправная точка:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    char str[] = "2010-03-03 15:55:06; 8.01; 24.9; 14.52; 0.09; 84; 12.47;"; 
    char *date, *tmp; 
    double mean = 0; 
    int i; 

    date = strtok(str, " "); 
    strtok(NULL, " "); // skip over time 
    while (tmp = strtok(NULL, ";")) { 
     ++i; 
     if (i == 3 || i == 6) { // get only the 3rd and 6th value 
      mean += strtod(tmp, NULL); 
     } 
    } 
    mean /= 2; 

    printf("%s: %.2f\n", date, mean); 

    return 0; 
} 

Вы просто должны делать что-то подобное для каждой линии.

+0

scanf может уже выполнить этот разбор. «% 10s% 10 [^;];% f;% f;% f;% f;% f;% f;" '- это строка формата, соответствующая описанию OP. –

+0

Огромное спасибо, что это действительно заставило меня прокатиться – chriscol