我有一个.csv文件,假设数据如下:
Location 1,Location 2,Price,Rooms,Bathrooms,CarParks,Type,Area,Furnish
Upper-East-Side,New-York,310000,3,2,0,Built-up,1000,Partly
West-Village,New-York,278000,2,2,0,Built-up,1000,Partly
Theater-District,New-York,688000,3,2,0,Built-up,1000,Partly
预期输出(按字母顺序):
Theater-District
Upper-East-Side
West-Village
如何只显示文件的第一列(位置1)并按字母顺序排列,同时跳过文件头?
这是目前我的代码,但它仍然是一个“读取和显示”的形式。
#include <stdio.h>
int main()
{
FILE *fh;
fh = fopen("file.csv", "r");
if (fh != NULL)
{
int line_number = 0;
char c;
while ( (c = fgetc(fh)) != EOF )
{
if(line_number > 0 || c == '\n'){
putchar(c);
}
if(c == '\n'){
line_number++;
}
}
fclose(fh);
} else printf("Error opening file.\n");
return 0;
}
2条答案
按热度按时间lqfhib0f1#
csv不是一个定义良好的格式,所以我建议您使用现有的csv库,而不是自己解析数据。例如,如果第一个字段有任何嵌入的逗号,这将不起作用。它依赖scanf()来分配行,并根据需要调整
lines
数组的大小。这意味着没有任何限制。它将生成预期输出:
u5i3ibmn2#
因此,假设对行长度和CSV文件记录计数有一些硬性限制,我们可以只使用数组。
要读取一条记录,只需使用
fgets()
。使用常用方法将每行文本添加到数组中。我们使用一个简单的字符串搜索和截断来分离第一个字段(假设没有像双引号字段这样的花哨内容,我假设您正在做功课)。
要对 * 除了 * CSV头记录之外的所有内容进行排序,请使用
qsort()
并进行一些额外的计算。