[英]How do I return a whole line from a .txt by searching for a string contained in that same line?
因此,我必须编写一个函数来读取文件 (.txt) 并搜索特定字符串,然后使其返回该字符串所在的整行。
例如,一行由学号、姓名、出生日期、地址和课程组成。 我需要搜索一个名字,我需要它返回整行,包含数字、名字等。
前任 :
输入:搜索学生姓名:HUGO
输出 :
61892 HUGOABC 12-02-2001 地址123 ETD
81029 HUGOBCA 09-09-2000 地址123 EAC
这是我的代码:
fp = fopen("database_Alunos.txt", "r+");
if (fp == NULL) {
printf("Error! File is NULL...");
system("pause");
main();
}
else {
char nome[50];
printf("Choose name to search : ");
scanf("%[^\n]s", &nome);
/* ??? */
fclose(fp);
system("pause");
main();
fp 是一个 FILE *fp,声明在 main() 之上;
我需要知道我可以在带有问号的代码空间中使用什么样的函数来使其扫描“nome”并返回整行
您需要使用 fp 遍历getline
,然后您可以使用例如strstr
来检查名称是否存在于该字符串中。 请注意,当地址中存在名称时,您必须处理这种情况。
char *line = NULL;
size_t len = 0;
ssize_t read;
while ((read = getline(&line, &len, fp)) != -1) {
if (strstr(line, nome) != NULL) {
printf("%s\n", line);
}
}
好的,我想通了,这是一个读取行的函数
int readline(char *buff, int len, FILE *fp) {
buff[0] = '\0';
buff[len - 1] = '\0';
char *tmp;
if (fgets(buff, len, fp) == NULL) {
*buff = '\0';
return 0;
}
else {
if ((tmp = strrchr(buff, '\n')) != NULL) {
*tmp = '\0';
}
}
return 1;
}
Func 读取名称和返回行:
scanf("%[^\n]s", fgets(nome, sizeof(nome), stdin));
char line[1024];
while (readline(line, 1024, fp)) {
char *aux = strdup(line);
char *numero = strtok(aux, "\t");
char *nomeAluno = strtok(NULL, "\t");
if (strstr(nomeAluno, nome) != NULL) {
printf("%s\n", line);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.