【问题标题】:Parsing and splitting a string from txt file in C从 C 中的 txt 文件中解析和拆分字符串
【发布时间】:2016-05-15 09:36:58
【问题描述】:

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

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

【问题讨论】:

  • 哪些因素决定了何时应该拆分字符?
  • 我不确定我理解您所说的“何时”是什么意思。它应该逐行解析,并且每一行都应该按照我之前解释的格式进行拆分。
  • 您只是在读取文件并打印它?你在哪里拆分它?
  • 读取,放入数组并打印。如果您的意思是在我的代码中进行拆分,那就是问题所在。我不知道如何以及在哪里进行拆分。我只知道如何打开文件并逐行读取。
  • @Mihajlo 请更清楚您要如何拆分字符串。是不是如果它以 0 开头是两个字符长,如果它以 1 开头是四个字符长?

标签: c arrays string parsing split


【解决方案1】:

为了让您了解它的工作原理,我编写了这个 sn-p 手动读取该数组中的行,假设我们已经知道所需的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多