读取文件直到 C 中的一个字符
Posted
技术标签:
【中文标题】读取文件直到 C 中的一个字符【英文标题】:Read a file until a character in C 【发布时间】:2011-02-08 03:00:23 【问题描述】:假设我有一个格式如下的文件:
key1/value1
key2/value2
key3/value3
....
假设我有一个数组来保存这些值:
char *data[10][10]
如何读取此文件并将 key1、key2 和 key3 放入 data[0][0]、data[1][0] 和 data[2][0]。然后将 value1、value2 和 value3 放入 data[0][1]、data[2][1] 和 data[3][1]。所以实际上我想单独获取key1-key3的字符串,然后测试'/'字符然后获取value1-3的字符串。顺便说一句,当我将这些输入到文件中时,我包含了 '\n' 字符,因此您可以对其进行测试以测试换行符。
【问题讨论】:
【参考方案1】:最好的方法是将每行的数据读入缓冲区,然后解析缓冲区。这可以扩展到读取大块数据。
使用fgets
将数据读入缓冲区。
使用strchr
查找分隔符。
示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_TEXT_LINE_LENGTH 128
int main(void)
FILE * my_file("data.txt", "r");
char text_read[MAX_TEXT_LINE_LENGTH];
char key_text[64];
char value_text[64];
if (!my_file)
fprintf(stderr, "Error opening data file: data.txt");
return EXIT_FAILURE;
while (fgets(text_read, MAX_TEXT_LINE_LENGTH, my_file))
char * p;
//----------------------------------------------
// Find the separator.
//----------------------------------------------
p = strchr('/');
key_text[0] = '\0';
value_text[0] = '\0';
if (p != 0)
size_t key_length = 0;
key_length = p - text_read;
// Skip over the separator
++p;
strcpy(value_text, p);
strncpy(key_text, text_read, key_length);
key_text[key_length] = '\0';
fprintf(stdout,
"Found, key: \"%s\", value: \"%s\"\n",
key_text,
value_text);
else
fprintf(stdout,
"Invalid formatted text: \"%s\"\n",
text_read);
// End: while fgets
fclose(my_file);
return EXIT_SUCCESS;
注意:以上代码未经编译和测试,仅供说明之用。
【讨论】:
以上是关于读取文件直到 C 中的一个字符的主要内容,如果未能解决你的问题,请参考以下文章