ファイルを読み込んで任意の行を表示させたいのですが
これからどうすればいいのか分かりません。
とりあえず、一行ずつ読み込んでいってファイル全体を表示することは出来ました。
自分なりに考えて二次元配列に格納したり試行錯誤したんですが。
よろしくお願いします。
void CIK3View::OnDraw(CDC* pDC)
{
CIK3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CStdioFile fp(e:\\data.txt,CFile::modeRead);
char buf[1011];
while(fp.ReadFile(buf,1011)!=NULL)
pDC->TextOut(0,0,buf,1011);
}
FILE *fp;
char cWork[256 + 1];
int i = 0;
int iNini; // 任意の行をセットする変数
fp = fopen(ファイル名,r);
while( i != iNini )
{
fgets(cWork,sizeof(cWork),fp) != NULL)
i++;
}
pDC->TextOut(0,0,cWork,sizeof(cWork));
こんな感じでどうでしょうか?
ちょっと不明な点があるので、確認させてください。
まず、読み込むファイルはどういった仕様なんでしょう?
特定の書式が定められたファイルですか、それとも特に制限のない任意のテキスト
ファイルですか?
例えば、行の長さが固定長ならば、n行目の位置は計算できるので、CFile::Seek
で目的位置に移動して一発で読めますし、任意のテキストファイルが相手なら、
ファイルの先頭から行を読んでいくしかないしと、回答も全く変わってきます。
けん★さんの回答は、後者を想定したものでしょう。
また、読み込んだデータをどう持つかですが、これは目的により最適な方法を設計
すべきものです。
そちらに関しては、詳細を示していただかないと回答できないと思います。
けん★さん、クラフトマンさん、返事有難うございます。
ファイルの内容は、
11123456
11134567
11145678
11156789
こんな感じです。クラフトマンさん言う固定長です。
これを一行ずつ配列に格納してその後さらにint型として扱いたいのです。
int型にするには、castを使うと思うのですが。
よろしくお願いします。
>int型にするには、castを使うと思うのですが。
atoiなどを調べてみてください。
>ファイルを読み込んで任意の行を表示させたいのですが
これだけがしたいのなら、クラフトマンさんがおっしゃる通り、固定長なら配列に入れる必要は
ないように思えますが。
実際にどういうことをしたいのか分からないのでなんとも言えませんが。
1行ずつ読み込むにはCStdioFile::ReadStringを使うのが簡単でしょう。
ちょっと自分と似た感じなので少しみなさんにお聞きしたいのですが、
任意のテキストファイルとかではなくて、アプリケーション実行中にダイアログボックス内に
入力された文字列を配列に読みこむ最善の方法はどんなものがありますか?fgetやgetcharを
使ってやればいいというのはヘルプを見てわかったんですが、その使い方の内容がいまいち
わかりません。できれば例題でプログラムを書いていただけると嬉しいです。
人のレスを勝手に使ってすいません!
fget()やgetchar()でダイアログ上のデータを取得しようとするのは無理なんじゃないでしょうか。
fget()はファイルから、getchar()は標準入力からのデータ取得となります。
MSDNに記述がありますので、ご確認ください。
「ダイアログボックス内に入力された」とありますが、
これは「ダイアログ上のエディットボックスに入力された」と解釈します。
手法はいくつかあると思いますが、
①DDEを使ったCWnd::UpdateData()によるデータ取得
②GetWindowText()によるデータ取得
がよくあるパターンなのではないでしょうか。
あと、この質問は新規に発言したほうがいいですね。
表向きには、へぼさんが質問していることがわかりにくいですし、
立石さんの質問に対するやりとりもわかりにくくなってしまいますから。
無事、解決することが出来ました。
協力してくれた方、どうも有難うございました。