从C

时间:2016-02-05 11:56:42

标签: c arrays string parsing split

我是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, " ");
    }
}

我非常感谢代码中的评论,因为我是新手,它会帮助我更好地理解一些事情。

1 个答案:

答案 0 :(得分:0)

为了让您了解它是如何工作的,我编写了这个代码片段,手动读取该数组中的行,假设我们已经知道了所需的结果。

以下方法不能被认为是正确的方法。理想情况下,您将有一系列规则来分割字符串,但在下文中,您必须手动为要读取的每一行设置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;
}