2016-09-15 7 views
0

私はTSVファイルを与えられました。 私はgetchar()関数を使用してそれを読んでおり、私の関数を実行するときには、プログラム< testfile.tsvをコマンドラインに入力します。TSVファイルから多次元配列へのコンテンツ

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

私はそれを読むことができますが、多次元配列に文字列を格納する方法はわかりません。 A [ROW] [COLUMN]の配列を作るには?

サンプル入力(\ tはタブで、\ nは改行です):

何か\ TIS \ 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

ちょうどあなたがフィールドを区切るためにコンマの代わりにタブを使用してもWHE、nitpickするために、使用する用語はまだある[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