读取一个文件,直到C中出现一个字符

读取一个文件,直到C中出现一个字符,c,file-io,file-read,C,File Io,File Read,假设我有一个格式如下的文件: key1/value1 key2/value2 key3/value3 .... 假设我有一个数组来保存这些值: char *data[10][10] 如何读取此文件并将key1、key2和key3放入数据[0][0]、数据[1][0]和数据[2][0]。然后将value1、value2和value3放入数据[0][1]、数据[2][1]和数据[3][1]中。实际上,我想分别得到key1-key3的字符串,然后测试“/”字符,然后得到value1-3的字符串。顺

假设我有一个格式如下的文件:

key1/value1
key2/value2
key3/value3
....
假设我有一个数组来保存这些值:

char *data[10][10]

如何读取此文件并将key1、key2和key3放入数据[0][0]、数据[1][0]和数据[2][0]。然后将value1、value2和value3放入数据[0][1]、数据[2][1]和数据[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;
}
#包括
#包括
#定义最大文本行长度128
内部主(空)
{
文件*my_文件(“data.txt”、“r”);
字符文本读取[最大文本行长度];
字符键_文本[64];
字符值_文本[64];
如果(!我的文件)
{
fprintf(stderr,“打开数据文件时出错:data.txt”);
返回退出失败;
}
while(fgets(文本读取、最大文本行长度、我的文件))
{
char*p;
//----------------------------------------------
//找到分隔符。
//----------------------------------------------
p=strchr('/');
键文本[0]='\0';
值_text[0]='\0';
如果(p!=0)
{
大小键长度=0;
键长度=p-文本读取;
//跳过分隔符
++p;
strcpy(值×文本,p);
strncpy(键文本、文本读取、键长度);
键文本[键长度]='\0';
fprintf(标准输出),
“已找到,键:\%s\,值:\%s\”\n”,
关键文本,
值(文本);
}
其他的
{
fprintf(标准输出),
无效的格式化文本:\%s\“\n”,
文本(已阅读);
}
}//结束:当fgets
fclose(我的_文件);
返回退出成功;
}
注:上述代码尚未编译或测试,但仅用于说明目的