gpt4 book ai didi

c - 如何读取文本文件

转载 作者:行者123 更新时间:2023-11-30 16:31:23 25 4
gpt4 key购买 nike

我正在尝试从文本文件中提取键、值,但我无法确定如何找到值的末尾。这是文本文件的一小段。

GIRRAFE: A tall spotted animal
LION: A short carnivore.
Prince: The son of a king.
Princess: The daughter of a king.

这是我的代码:

FILE *fp;
char line[20], word[20];
int i = 0, endind;

fp = fopen(file, "r");
if (fp==NULL){
printf("Error parsing the file\n");
exit(1);
}
while (!feof(fp)){
fgets(line, 100, fp);
for (i;i<strlen(line);i++){
if (line[i]=='.'){
endind = i;
}
}
for (i;i<endind;i++){
word[i] = line[i];
printf("%s\n",word);
}


}

代码不是很好,因为我无法获得以完整空白换行符结尾的值。

最佳答案

从示例数据来看, key 似乎以第一个 '.' 结尾在字符串中。使用 strchr(3) 来查找它。但看起来像该值和整个项目以两个换行符结尾。为了您需要编写代码将段落读入字符串。为此,malloc(3) 和 realloc(3) 将很有用。如果你有已知最大大小,您当然可以使用固定大小的缓冲区。

将问题分解为几个部分。首先,读一段话,然后找到键结束的地方,然后找到值开始的地方。决定是否两个换行符是该值的一部分,以及句点是否是该值的一部分的关键。

要阅读一个段落,请逐行阅读。如果该行为空(可以使用 strcmp(line, "\n") 确定),则您已完成读取该值,你可以继续前进。否则,将该行附加到段落缓冲区。

将整个段落作为单个字符串后,找到该段落的结尾键与 char *keyend = strchr(para, '.'),这将返回指向 '.' 字符的指针。您可以将该字符替换为 null (*keyend = 0)现在 para 是一个带有键的字符串。接下来推进键端指针到第一个非空白字符。有几种方法可以做到这一点。此时,keyend 将指向该值。哪个为您提供 para 作为指向 key 的指针,而 keyend 作为指向值(value)。这样,您就可以更新哈希表了。

我还会检查一路上的错误,并且可能使用单独的更好地为段落、键和值命名的变量。修剪关闭尾随换行符和其他数据验证是可选的。例如,如果段落根本不包含 '.' 字符怎么办?

关于c - 如何读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com