从TSV文件到多维数组的内容

时间:2016-09-15 09:26:24

标签: c arrays csv multidimensional-array

我收到了TSV文件。 我正在使用getchar()函数读取它并输入program<运行我的函数时,testfile.tsv进入我的命令行。

    while ((c=getchar()) != EOF) {

我能够通读它,但我不知道如何将字符串存储在多维数组中。如何制作一个A [ROW] [COLUMN]的数组?

示例输入(\ t是制表符,\ n是换行符):

任何\ t已\ tPossible \ tYay \ n

什么\ TDO \ TI \ TDO \ n

此\那朵\ tgreat \2瓦特\ n

这是我尝试过的。

    if (c == '\t') {
        columncount += 1;
        A[rowcount][columncount] = c;

    };
    if (c == '\n') {
        columncount += 1;
        A[rowcount][columncount] = c;
        rowcount += 1;
        columncount = 0;
    }

1 个答案:

答案 0 :(得分:0)

这很简单:当您读取选项卡时,会增加用于列的索引变量,当您读取换行符时,您将重置列索引并增加行索引变量。

在开始阅读之前,应确保索引变量已正确初始化,并且在递增变量时不会超出范围。

另外,不要忘记在获得制表符或换行符时终止字符串。不要将制表符或换行符放在字符串中。

最后,你需要一个数组数组的数组,即

char A[ROWS][COLUMNS][MAX_LENGTH_OF_STRINGS];

翻译成代码,您可以执行类似

的操作
int c;
int row = 0;
int column = 0;
int string_index = 0;

while ((c = getchar()) != EOF)
{
    if (c == '\t')
    {
        A[row][column++][string_index] = '\0' // Terminate the string
        string_index = 0;
    }
    else if (c == '\n')
    {
        A[row++][column][string_index] = '\0' // Terminate the string
        string_index = 0;
        column = 0;
    }
    else
    {
        if (string_index >= MAX_LENGTH_OF_STRINGS)
        {
            printf("Error: String to long at row %d, column %d\n", row, column);
            break;
        }
        if (row >= ROW)
        {
            printf("Error: row is to large: %d\n", row);
            break;
        }
        if (column >= COLUMN)
        {
            printf("Error: column is to large: %d (at row %d)\n", column ,row);
            break;
        }

        A[row][column][string_index++] = c;
    }
}

现在要对加载的文本做些什么,打印它怎么样?

for (row = 0; row < ROW; ++row)
{
    for (column = 0; column < COLUMN; ++column)
    {
        printf("A[%d][%d] = %s\n", row, column, A[row][column]);
    }
}