从文本文件中读取并放入多个2d数组

时间:2014-10-14 17:50:39

标签: c matrix

如何从文件中读取字符串并将其放入2d数组表中。 文本文件:

0 0/0a 1/0b 2/0c 3/0d 4/0e 5/99
1 0/0b 1/0b 2/99 4/0c 5/99

所以,0是第一行, 0 / 0a表示(0)是第一列,(0a)插入(0,0)

所以,1是第二行。 4 / 0c表示(4)是第四列,(0c)插入(1,4)

99表示00,应替换为00。 如果缺少该列(例如第二行,则没有第3列,应该放置为00)。

期待输出:

  0  1  2  3  4  5
0 0a 0b 0c 0d 0e 00
1 0b 0b 00 00 0c 00

我到目前为止所做的代码:

int main(int argc, char*argv[]){
    FILE *fp;
    fp = fopen(argv[1], "r");
    if(fp==NULL) return 1;
    printf("File is open successfully.\n");
    char *ptr, buf[256];
    while((ptr = fgets(buf, 256, fp)) != NULL){
        printf("%s", ptr);
    }
    fseek ( fp, 0, SEEK_SET);
}

我只是有点失落,从哪里开始。任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:0)

如果列数可能小于6(0到5),那么您应该使用strtok拆分该行,使用简单的"%d"获取行号,最后打印空行如果行号向前跳过(如果它向后跳过则是错误的。)

然后,您使用"%d/%x"逐步读取列,将最终跳过的列设置为0,如果列为0x99,则将列设置为0(读为hexa ...)。

这是我的代码:

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

#define MAX 6

int main(int argc, char *argv[]) {
    FILE *fp;
    int data[MAX];
    char *ptr, buf[256], *ix;
    int line = 0, i, j, col = MAX;
    fp = fopen(argv[1], "r");
    if(fp==NULL) return 1;
    printf("File is open successfully.\n");
    while((ptr = fgets(buf, 256, fp)) != NULL){
        // printf("%s", ptr);
        ix = strtok(buf, " ");
        if (ix == NULL) break;
        if ((sscanf(ix, "%d%*c", &i) != 1) || (i < line)) {
            fprintf(stderr, "Error line %d indicated as %d\n", line, i);
            return 1;
        }
        while (line < i) {
            for(j=0; j<col; j++) printf(" 00");
            printf("\n");
        }
        col = 0;
        while (ix = strtok(NULL, " ")) {
            if (col >= MAX) {
                fprintf(stderr, "Too much elements line %d (more than %d)\n", line, MAX);
                return 2;
            }
            if ((sscanf(ix, "%d/%x", &i, &j) != 2) || (col > i)){
                fprintf(stderr, "Incorrect syntax line %d elt %d\n", line, col);
                return 3;
            }
            while(col < i) data[col++] = 0;
            if (j == 0x99) j = 0;
            data[col++] = j;
        }
        for(j=0; j<col; j++) printf(" %02x", data[j]);
        printf("\n");
        line++;
    }
    fclose(fp);
}