2016-09-15 43 views
0

我已经获得TSV文件。 我正在通过使用getchar()函数读取它,并在运行我的函数时将testfile.tsv输入到我的命令行中。我可以通读它,但我不知道如何将字符串存储在多维数组中。如何创建一个数组,这将是A [ROW] [COLUMN]?来自TSV文件的内容转换为多维阵列

采样输入(\ t是选项卡,\ n是换行):

任何\ t已\ tPossible \ 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; 
    } 
+0

只是鸡蛋里挑骨头,甚至磨片使用标签,而不是逗号分隔字段,使用术语仍然[CSV文件](https://en.wikipedia.org/wiki/Comma-separated_values) 。 –

回答

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

我该如何让数组等于,来存储字符串 – Diablo

+0

如果您能够通过此操作,将不胜感激。当getchar()每次读取1个字符时,如何为数组构成字符串。我没有太多的经验与C. – Diablo