簡體   English   中英

讀取文件直到C中的字符

[英]Read a file until a character in C

假設我有一個格式為的文件:

key1/value1
key2/value2
key3/value3
....

假設我有一個數組來保存這些值:

char *data[10][10]

如何讀取此文件並將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;
}

注意:上述代碼尚未編譯或測試,但僅用於說明目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM