如何读取 c 中特定列的行?

How do I read the rows of a specific column in c?

在检查该列是否为 "General" 之后,我尝试了多种方法来读取新行,但仍然根本不起作用。它是一个 csv 文件,每个 fgets 之后都是带逗号的行,我需要一个包含它的数据的特定列。

这是我的代码:

char fi[1024];
while(!feof(CsvFile)){
    //Read
    fgets(fi, 1024, CsvFile);
    if(strstr(fi, "General") == 0){
        fscanf(CsvFile, "%[^\n]s", fi);
        printf("%s", fi);
    }
    fgetc(CsvFile);
}

它没有打印我想要的。

读取 CSV 文件比您想象的复杂得多(参见https://www.rfc-editor.org/rfc/rfc4180)。您必须考虑所有类型的规则。例如,如果单元格包含逗号,则内容必须用 ".

包围

但是,您可以实施一个简化版本,它假定:

  • CSV 文件由行组成;
  • 一行最多MAX_LINE个字符;
  • 一行由单元格组成;
  • 单元格以逗号或换行符结尾;
  • 单元格不包含逗号或换行符。

下面的代码一次读取一行,然后使用 strtok 将行拆分为单元格。

欢迎来到 SO,祝你好运!

#include <stdio.h>
#include <string.h>

#define MAX_LINE 1024

int main( int argc, char* argv[] )
{
  //
  FILE* fp = fopen( "c:\temp\so.txt", "r" );
  if ( !fp )
  {
    printf( "could not open file" );
    return -1;
  }

  //
  char line[ MAX_LINE + 1 ];
  while ( fgets( line, sizeof( line ) / sizeof( *line ), fp ) ) // get a line
  {
    int col_idx = 0;
    const char* sep = "\r\n,"; // cells are separated by a comma or a new line
    char* cell = strtok( line, sep ); // find first cell
    while ( cell )
    {
      // your processing code goes here
      cell = strtok( NULL, sep ); // next cell
      col_idx++;
    }
  }

  return 0;
}