2010-10-22 172 views
1

任何人都可以通过指导我如何从C程序中读取.txt文件或.csv文件来帮助我。 我的意思是哪个C函数适合阅读操作?实际上我的.txt或.csv文件具有以下所示的固定图案:如何从C程序中读取.txt文件或.csv文件?

Temperature = 35 
Pressure Segment 1 
Slope = 5.5 
Offset = 10 

Temperature = 100 
Pressure Segment 1 
Slope = 53 
Offset = 12 

Temperature = 150 
Pressure Segment 1 
Slope = 1 
Offset = 12 

此外哪个文件.txt或.csv是容易从C程序读?

+0

你的意思是CSV(逗号分隔值)文件吗? – bdhar 2010-10-22 08:05:20

+3

可能重复的[如何在C中逐行读取文件](http://stackoverflow.com/questions/1842393/how-to-read-a-file-line-by-line-in- c) – 2010-10-22 08:06:46

+0

是的! (对不起,我的错误) – Asad 2010-10-22 08:08:42

回答

2

最简单的(也是最灵活的,有一些陷阱是使用scanf函数):

#include <stdio.h> 

struct Record { 
    int temperature; 
    unsigned int pressure_segment; 
    double slope; 
    int offset; 
}; 

int readRecord(FILE* f, Record* rec) { 
    if (fscanf(f, 
      "Temperature = %i Pressure Segment %u Slope = %lf Offset = %i\n", 
      &rec->temperature, 
      &rec->pressure_segment, 
      &rec->slope, 
      &rec->offset) == 4) { 
     return 0; 
    } else { 
    return -1; 
    } 

} 

Record rec; 
FILE* f = fopen("your-file-name", "r"); 
while (!feof(f)) { 
    if (readRecord(f, &rec) == 0) { 
    printf("record: t: %i p: %u s: %lf o: %u\n", 
      rec.temperature, 
      rec.pressure_segment, 
      rec.slope, 
      rec.offset); 
    } 
} 
fclose(f); 

对于任何高级的使用(读比快速和肮脏的解决方案,任何东西),我建议使用一些CSV库散围绕互联网。

编辑:编辑问题的readRecord版本(每条记录在一个单独的行上)。

int readRecord(FILE* f, Record* rec) { 
    if (fscanf(f, 
    "Temperature = %i\nPressure Segment %u\nSlope = %lf\nOffset = %i\n", 
    &rec->temperature, 
    &rec->pressure_segment, 
    &rec->slope, 
    &rec->offset) == 4) { 
     return 0; 
    } else { 
    return -1; 
    } 
} 
+0

请注意,当问题被查看编辑时,数据似乎分成四行 - 当给出这个答案时,数据似乎对于现在显示的每一组4行都在一行上。 – 2010-10-22 09:10:03

+0

@Jonathan:谢谢,“编辑”版本已经出来。 – MaR 2010-10-22 09:19:21