Moh*_*nde 4 c file-io file-read
假设我有一个格式为的文件:
key1/value1
key2/value2
key3/value3
....
Run Code Online (Sandbox Code Playgroud)
假设我有一个数组来保存这些值:
char *data[10][10]
Run Code Online (Sandbox Code Playgroud)
如何读取此文件并将key1,key2和key3输入数据[0] [0],数据[1] [0]和数据[2] [0].然后将value1,value2和value3放入data [0] [1],data [2] [1]和data [3] [1].所以实际上我想单独获取key1-key3的字符串,然后测试'/'字符然后获取value1-3的字符串.顺便说一句,当我将这些输入到文件中时,我将包含'\n'字符,以便您可以测试它以测试换行符.
最好的方法是将每行数据读入缓冲区,然后解析缓冲区.这可以扩展到读取大块数据.
使用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;
}
Run Code Online (Sandbox Code Playgroud)
注意:上述代码尚未编译或测试,但仅用于说明目的.
| 归档时间: |
|
| 查看次数: |
10813 次 |
| 最近记录: |