2016-09-15 84 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