プロが教える店舗&オフィスのセキュリティ対策術

テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。

テキストファイルが1行区切りの整数型なら1次元配列で
for(i = 0; i < maxSize; i++)
{
fscanf(fp,"%d", &data[i]); }

テキストファイルが1行区切りの文字列なら2次元配列で
for(i = 0; i < MAXSIZE; i++)
{
if (fscanf(fp,"%s", &data[i][300]) == EOF)
break;

}

for(j = 0; j < i; j++)
printf("%s\n", data[j]);

みたいな具合に格納できたんですが、
テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。
イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・

質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

A 回答 (3件)

> テキストファイルが1行区切りの文字列なら2次元配列で


> if (fscanf(fp,"%s", &data[i][300]) == EOF)

2点ほど。
・data[][]の型が書いてないので詳細は不明ですが
これでは、data[i][300]に(または、data[i][300]から)データが入るのでは?
・%sで、というより、scanf系のほとんどの変換子で取り込めるのは、「1行区切り」だけではありません。
スペースもタブも改行も「空白文字」として同じ扱いになります。例外は[]くらい。

> テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。

まずは「どのように格納するのが、後の処理を考えた場合に便利か」を御自身で考えてください。
行→列と分解した方がいい場合、行で格納して列の分解はしない方がいい場合、行も列も関係なく一列に格納した方がいい場合。
また、文字列のまま格納した方がいい場合、整数や実数等の数値に変換した方がいい場合。
扱うデータや後の処理によって最適な方法は違います。

決まったら、それをやるのに便利な方法を考え選択します。
例えば、行→列に分解なら
・fgetsで1行読み込み→strtokで分解
・同→sscanfで個別に変換
・同→自作関数「1文字目から見ていって空白が出ればそこで切って格納」
等があるし、とにかく行関係なく一列に格納するなら fscanfを連続で実行するだけです(上に書いたように、%sや%dは改行と空白の区別がありません)
    • good
    • 0
この回答へのお礼

いろいろやりかたあるんですね!
是非とも参考にさせていただきます!

お礼日時:2011/07/08 13:15

空白文字が、(いわゆる半角)スペースやタブを意味しているのなら、プログラムは全く変更する必要はありません。


勝手に空白文字で区切ってくれます。

あと、

if (fscanf(fp,"%s", &data[i][300]) == EOF)

は、

if (fscanf(fp,"%s", data[i]) == EOF)

と書かれることが多いと思います。
    • good
    • 0
この回答へのお礼

変更しなくてもできました!
ありがとうございます!
全角の空白の場合のみ工夫がいるかんじですね!

お礼日時:2011/07/08 13:14

%d%d…%dと並べるか


(引数の上限があるでしょうからどこかで破たんしますが、そもそも整数データ300個は空白で区切ってもキーボード入力できないと思います)
gets();でストリングを読み込んで、空白を判定してdataに自身で格納するプログラミングをします
    • good
    • 0
この回答へのお礼

ありがとうございます!
参考にさせていただきます!

お礼日時:2011/07/08 13:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!