c - 在c中的文本文件中过滤查询
问题描述
(C LANGUAGE)我在一个文本文件中有以下数据,想要过滤特定年龄、收入超过 x 工资且低于 y 年龄的人。
假设第一列是年龄,最后一列是薪水,例如
39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K
50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, Husband, White, Male, 0, 0, 13, United-States, <=50K
解决方案
看起来输入文件实际上是 CSV 格式。我建议参考 Read .csv file in C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char* getfield(char* line, int num)
{
const char* tok;
for (tok = strtok(line, ",");
tok && *tok;
tok = strtok(NULL, ";\n"))
{
if (!--num)
return tok;
}
return NULL;
}
int main()
{
FILE* stream = fopen("input", "r");
char line[1024];
while (fgets(line, 1024, stream))
{
char* tmp = strdup(line);
printf("Field 3 would be %s\n", getfield(tmp, 3));
// NOTE strtok clobbers tmp
free(tmp);
}
}
您还可以查找以下CSV parser
库:
https ://github.com/semitrivial/csv_parser