2012-01-13 6 views
3

スペースとタブで区切られたテキストファイルから単語と数字を読み込もうとしています。私は "ステップ"と "偽"を含む行を識別する必要があります。私はまた、それぞれの単語や番号を別々に保存して、後で出ることができるようにする必要があります。Cのテキストファイルから文字列を読み取って行末を特定する

私は、行の最後に "False"を識別するコードの部分を書くのに問題があります。 Falseに達したことを認識してforループを解除するコードが必要です。

注:独自のパスを入力するように設計されています。この部分は機能します。また、fscanfはfgetsやfputsよりもはるかに難しいと読みましたが、私が読んでいるデータファイルは非常に一貫しています。これは私の目的のためにうまくいくようですが、いくつかのエントリーは倍にする必要があります。

int j; 
    int k; 
    char i[4];      
    char File_path[40]; 
    char dummy; 
    char stuff[7] = "False" 

    printf("Input Path: "); 
    scanf("%s", &File_path); 
    printf("Reading: %s\n\n",File_path); 
    FILE *fp; 
    fp=fopen(File_path, "r"); 
    for(j=0; j<7 && i != stuff; j++) 
    { 
     fscanf(fp,"%s",i); 
     fprintf(stdout,"Read: %s\n",i); 
    } 
    fclose(fp); 

私が読んでいるファイルは次のとおりです。

True.0 kinda false False False 

これが返されます。

Reading: c:\\Data\\1.txt 

Read: True.0 
Read: kinda 
Read: false 
Read: False 
Read: False 
Read: False 
Read: False 

を私は「偽」にコンテンツを変更しようとしていると私は同じ結果を得ます。

答えて

4

あなたは、あなたがそれを行うためにstrcmp()またはstrncmp()を使用する必要があるC.で途中の文字列を比較することはできません。

for (j = 0; j < 7 && strcmp(i, stuff); j++) 

ループ条件が"False"に初めてにiポイントを中断します。また、iを大きくする必要があります。例の最初の読み込み時にバッファをオーバーフローさせます。

編集 - 実際にはfgets()strtok()またはその親戚の1人を使って作業したいと思うかもしれません。

+0

バッファまでは、バッファが自動的に展開されていると仮定しました。私はその理由であまりにも小さすぎたのです。私は必要に応じて自動的に拡張するいくつかの機能を見ていました。正しい長さを割り当てられていないにもかかわらずコピーを管理していたので、正しくコピーされていると仮定しました。私はこれが当てはまりませんが、なぜ文字列がまだ正しくコピーされたのか説明しません。私はMATLABで最初に学んだので、私のメモリ割り当てに関する知識は貧弱です。そして、私はちょうどその機能を見た。それは私が取得を使用できるようにする必要があります。ありがとう! – Shay

+0

バッファの自動拡張*決して*私は知っている限り、Cで発生します。おそらく、別の方法で動作するいくつかのクレイジーライブラリがあるかもしれませんが、配列のサイズを変更することはできません。 –

関連する問題