我试图简单地读取一个基本的文本文件,将每一行拆分成单独的字符串,并将它们重新排列/复制到一个新的文本文件中。是否有任何简单的方法来分割和识别这些字符串,以便在处理行结束时添加到新文件中?
到目前为止我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *pFileCust
fPointer = fopen("Athletes.txt", "r");
char singleLine[150];
while (!feof(pFileCust)){
fscanf(singleLine, 150);
int id, name, sport;
fprintf(%d[0,6], %s[8,15], %s[16,22], id, name, sport);
}
fclose(fPointer);
return 0;
}
示例文本要读入程序的文件:
88888 John Doe Tennis
99999 Jane Smith Softball
我想要实现的输出示例。
Tennis 88888 John Doe
Softball 99999 Jane Smith
答案 0 :(得分:0)
文件中的每一行都对应一条记录。每个连续的非空白字符系列对应于当前记录中的字段。因此,
/* getrecord: read next record on fp */
char *getrecord(FILE *fp)
{
assert(fp);
char *line = malloc(MAXLINE);
if (line != NULL)
if (fgets(line, MAXLINE, fp) != NULL)
return line;
return NULL;
}
/* getfield: read next field in record */
char *getfield(const char *record, int *pos)
{
assert(record && pos);
char *record;
int ret;
if ((record = malloc(MAXRECORD)) != NULL) {
ret = sscanf(record + *pos, "%s", record);
if (ret == 1)
return record;
}
return NULL;
}
虽然每个功能似乎都没有做太多工作,但将业务逻辑与记录/字段读取分开具有实际的好处。它允许可扩展性(例如,您可以为这些例程添加错误处理)。您还可以更好地理解代码。现在您可以编写将使用这对调用的main
函数。
答案 1 :(得分:0)
以下是对(a)编译的代码的简单修改,以及(b)生成所需的输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *pFileCust = fopen("Athletes.txt", "r");
char first_name[100], last_name[100], sport[100];
int id;
while (fscanf(pFileCust, "%d %s %s %s", &id, first_name, last_name, sport) != EOF) {
printf("%s %d %s %s\n", sport, id, first_name, last_name);
}
fclose(pFileCust);
return 0;
}
你的应用程序缺少的一个关键事项是为变量赋值的任何事情;你的fscanf没有做任何事情(如果它甚至编译)。 fscanf不是解析文本的好方法,它不是很强大。但是对于理解变量如何分配的原则,请仔细查看,特别要理解为什么id前面有一个&符号。另外,请确保您了解我使用名字和姓氏的原因。