• ベストアンサー

fgetc 使用方法

失礼します今fgetcで読み込んだファイルをカンマ区切りで配列に追加したいのですが、そのような使用方法は可能でしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

追記。 「fgetcで読み込んだファイルをカンマ区切りで配列に記憶する」であれば、例えば、以下のようにします。 1.「charのポインタ」の2次元配列を用意して、初期化する。また「今の行番号」と「今の列番号」を覚えておく変数を用意して、0に初期化しておく。 2.開いたファイルの「ファイルポインタの位置」をftell関数などで記憶しておく。 3.fgetcを繰り返して「,」か「改行」か「EOF」が来るまで「何文字あるのか?」を数える。 4.数えた文字数分+1文字分のメモリを「malloc(数えた文字数+1)」などで動的に確保する。 5.ファイルを、上記「2.」で記憶してあった「ファイルポインタの位置」に、fseek関数などで巻き戻しする。 6.確保したメモリに「,」か「改行」か「EOF」が来るまで、fgetcで読み込んだ文字を格納する。 7.読んだ文字列を格納したら、格納した「末尾」に「終端文字('\0')」を追加して「文字列の終わり」を明確にする。 8.確保したメモリのポインタを、1.で確保した配列の「今の行番号の、今の列番号」の所に記憶する。 9.読み込んだ区切り文字が「,」であれば「配列の列番号」を1つ増やす。列番号が1000以上になったら、列番号を0に戻し、行番号を1つ増やしてから、「改行」か「EOF」が来るまで、fgetcで空読みする。行番号が11以上になっていたらファイルを閉じて終了する。 10.読み込んだ区切り文字が「改行」であれば、列番号を0に戻し、行番号を1つ増やす。行番号が11以上になっていたらファイルを閉じて終了する。 11.読み込んだ区切り文字が「EOF」であれば、ファイルを閉じて終了する。 12.上記「2.」から、処理を繰り返す。 「どういうイメージでメモリにデータを格納するか」がしっかり設計できていれば、上記のように「どのように処理するべきか?」を設計できます(処理の流れを、上記のように「何をすべきか、人間が理解できる言語で書くこと」が可能になります) 「どのように処理するかを設計」できれば、あとは「設計した物(人間が理解できる言語で書かれた処理の流れ)を、プログラムコードに置き換えるだけ」です。

losloson
質問者

お礼

有難うございます。以後精進していきます。

その他の回答 (1)

回答No.1

>そのような使用方法は可能でしょうか? 可能ですが、現状の貴方には不可能です。 不可能な理由は「貴方が、どのようなイメージで配列にデータを記憶するのかを、まったく判っていない」からです。 「fgetcでファイルの中身を1文字づつ読み込む」のが出来ても「読み込んだ物を、どこに、どのように記憶させておくのか」が正しく設計できないと「なにをしても無駄」です。 一連の質問を読むと、この「読み込んだ物を、どこに、どのように記憶させておくのか」が、まったくダメな状態です。「修正の施しようが無いくらいにダメ」です。 基礎習得以前の問題ですから、もう1年くらい、基礎から習得し直した方が良いでしょう。 「読み込むだけならサルでも出来る。読み込んだ物をどうやって記憶するかが問題」なのです。 「どうやってデータをメモリ上に保持するか」という部分をきちんと設計できるようにならないと、お話になりません。