簡體   English   中英

從C中的txt文件解析和拆分字符串

[英]Parsing and splitting a string from txt file in C

我是C語言的新手,我得到了從.txt文件逐行讀取並將其解析為第一行為第一行,第二行為第二行等的矩陣的任務。這就是我在text.txt中擁有的內容文件:

07 45 C4 16 0F 02 19 0I 17 0G 
09 45 C4 15 0E 03 11 0A 12 0B 13 0C
13 45 C4 13 0C 03 19 0I 11 0A 17 0G 14 0D 16 0F
05 45 C4 18 0H 01 12 0B

到目前為止,這是我能夠做到的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *Read(char filename[]);

void split(char *content);

int main(void){

    char filename[] = "text.txt";
    char *content = Read(filename);
    split(content);
    return 0;
}

char *Read(char filename[]){

    char *buffer;
    long size;

    FILE *log = fopen("text.txt", "r");
    fseek(log, 0, SEEK_END);
    size = ftell(log);
    rewind(log);

    buffer = (char*) malloc(sizeof(char) * size);
    fread(buffer, 1, size, log);
    fclose(log);

    return buffer;
}

void split(char *content){

    char *buffer = strtok(content, " ");
    while(buffer != NULL){
        printf("%s\n", buffer);
        buffer = strtok (NULL, " ");
    }
}

我真的很感謝代碼中的注釋,因為我是菜鳥,它將幫助我更好地理解一些東西。

為了讓您了解它是如何工作的,我編寫了此代碼片段,假設我們已經知道所需的結果,可以手動讀取該數組中的行。

以下方法不能視為正確的方法。 理想情況下,您將有一系列規則來分割字符串,但是在下面,您必須為要讀取的每一行手動設置scanf格式。

記住要檢查scanf的返回值,這里我們應該確保已經讀取了7個元素。

int main(void) {
    FILE *log;
    char buffer[SIZE];
    char line[SIZE];

    char array[10][10];

    if ((log = fopen("text.txt", "r")) == NULL){
        fprintf(stderr, "Can't open input file!\n");
        return(1);
    }

    while(fgets(buffer, sizeof(buffer), log)){
        int ret = sscanf(buffer, "%2s%2s%2s%4s%2s%4s%4s", array[0], array[1], array[2], array[3], array[4],array[5], array[6]);
        printf("read %d elements\n", ret);
        if (ret != 7) {
           return(1);
        }
        printf("%s", buffer);
    }

    int i;
    for (i=0; i < 6; i++)
        printf("%s\n", array[i]);

    fclose(log);

    return 0;
}

暫無
暫無

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

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