6

みなさん、こんにちは。

私はCプログラミングの初心者です。私はこの問題を抱えており、かなりの進歩なしにかなりの時間を費やしてきました。

私の問題はこう述べられています:

拡張子が(.msr)の一連のファイルがあります。これらのファイルには、日付、時刻、温度、圧力など、セミコロンで区切られた10個を超えるパラメーターの測定値が含まれています。データ値の例を以下に示します。

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つのファイルに含まれています。

  1. 各ファイルから日付情報(この場合は2010-03-03、列3、列6)を抽出したいと思います。

  2. 3列と6列のそれぞれの統計的平均を求めます。

  3. 次に、結果を新しいファイルに保存します。このファイルには、日付と、さらに分析するために上記の列の計算された平均のみが含まれます。

それらはcで書かれることになっています。

私は本当にこれを始めるためにこれへのあなたの援助を数えています。

よろしく

4

2 に答える 2

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;
}

各行にそのようなことをするだけです。

于 2010-07-28T10:54:17.297 に答える
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で答えられると確信しています。

編集 :

もちろん、 strtokまたはstrtok_r (strtok の再入可能バージョン)を使用して各文字列を解析することもできます。リンクの例を確認して、アイデアを得てください。

于 2010-07-28T10:50:51.363 に答える