如何从C程序读取.txt文件或.csv文件?

时间:2010-10-22 08:02:23

标签: c

哪种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程序中读取?

1 个答案:

答案 0 :(得分: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;
  }
}