2010-07-28 32 views
3

好日子所有我怎樣才能讀取特定數據列,從文件在C

我在C 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 2010-07-28 10:37:32

+2

爲什麼不使用awk呢? – Muxecoid 2010-07-28 10:41:58

回答

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 

可能有更好,更容易的方式來做到這一點,我肯定會被在所以在這裏回答。

編輯:

Ofcourse,您還可以使用解析或strtokstrtok_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描述相匹配的格式字符串。 – 2010-07-28 11:23:15

+0

非常感謝,這真的讓我滾動 – chriscol 2010-08-01 15:16:01