【问题标题】:Content from TSV file into a Multi-Deimensional ArrayTSV 文件中的内容到多维数组中
【发布时间】:2016-09-15 09:26:24
【问题描述】:

我收到了一个 TSV 文件。 我正在使用 getchar() 函数阅读它,并在运行我的函数时将 program

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

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

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

任何事情\tIs\t可能\tYay\n

做什么\tDo\tI\tDo\n

这\tis\tgreat\twow\n

这是我尝试做的。

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

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

【问题讨论】:

  • 只是为了挑剔,即使您使用制表符而不是逗号来分隔字段,使用的术语仍然是CSV file
  • 我觉得称它为TSV文件也不错。上面链接的关于 CSV 的 wiki 页面提到,使用 CSV 作为两种格式的标签“可能会导致数据交换出现问题”。当我使用制表符分隔的文件时,它们通常与逗号分隔的文件共享一个文件夹,通过查看文件扩展名或将其称为 TSV 来了解我正在处理的文件非常有帮助。

标签: c arrays csv multidimensional-array


【解决方案1】:

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

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

当你得到一个制表符或换行符时,不要忘记终止字符串。不要在字符串中放置制表符或换行符。

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

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]);
    }
}

【讨论】:

  • 我使数组等于什么,以存储字符串
  • 如果您能指导我完成此过程,我们将不胜感激。当 getchar() 一次读取 1 个字符时,如何形成数组的字符串。我对 C 没有太多经验。
猜你喜欢
  • 2012-12-27
  • 2012-12-18
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2021-05-04
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多