如何读取 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;
}
在检查该列是否为 "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;
}