Как я могу прочитать конкретные столбцы данных из файла в C - PullRequest
5 голосов
/ 28 июля 2010

Добрый день всем,

Я новичок в программировании на c. У меня есть эта проблема, и я потратил довольно много времени на нее без какого-либо значительного прогресса.

Моя проблема сформулирована так:

У меня есть серия файлов с расширением (.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. Затем сохраните результаты в новом файле, который будет содержать только дату и вычисленное среднее значение столбцов, приведенных выше, для дальнейшего анализа.

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

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

Привет

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

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

#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 голосов
/ 28 июля 2010

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.

РЕДАКТИРОВАТЬ:

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

...