一行出力 – プログラミング – Home

通知
すべてクリア

[解決済] 一行出力


立石
 立石
(@立石)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ファイルを読み込んで任意の行を表示させたいのですが
これからどうすればいいのか分かりません。
とりあえず、一行ずつ読み込んでいってファイル全体を表示することは出来ました。
自分なりに考えて二次元配列に格納したり試行錯誤したんですが。
よろしくお願いします。

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);
}


引用未解決
トピックタグ
けん★
 けん★
(@けん★)
ゲスト
結合: 23年前
投稿: 28
 

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));

こんな感じでどうでしょうか?


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

ちょっと不明な点があるので、確認させてください。
まず、読み込むファイルはどういった仕様なんでしょう?
特定の書式が定められたファイルですか、それとも特に制限のない任意のテキスト
ファイルですか?
例えば、行の長さが固定長ならば、n行目の位置は計算できるので、CFile::Seek
で目的位置に移動して一発で読めますし、任意のテキストファイルが相手なら、
ファイルの先頭から行を読んでいくしかないしと、回答も全く変わってきます。
けん★さんの回答は、後者を想定したものでしょう。
また、読み込んだデータをどう持つかですが、これは目的により最適な方法を設計
すべきものです。
そちらに関しては、詳細を示していただかないと回答できないと思います。


返信引用
立石
 立石
(@立石)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

けん★さん、クラフトマンさん、返事有難うございます。

ファイルの内容は、

11123456
11134567
11145678
11156789

こんな感じです。クラフトマンさん言う固定長です。
これを一行ずつ配列に格納してその後さらにint型として扱いたいのです。
int型にするには、castを使うと思うのですが。

よろしくお願いします。


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

>int型にするには、castを使うと思うのですが。
atoiなどを調べてみてください。

>ファイルを読み込んで任意の行を表示させたいのですが
これだけがしたいのなら、クラフトマンさんがおっしゃる通り、固定長なら配列に入れる必要は
ないように思えますが。
実際にどういうことをしたいのか分からないのでなんとも言えませんが。
1行ずつ読み込むにはCStdioFile::ReadStringを使うのが簡単でしょう。


返信引用
へぼ
 へぼ
(@へぼ)
ゲスト
結合: 23年前
投稿: 4
 

ちょっと自分と似た感じなので少しみなさんにお聞きしたいのですが、
任意のテキストファイルとかではなくて、アプリケーション実行中にダイアログボックス内に
入力された文字列を配列に読みこむ最善の方法はどんなものがありますか?fgetやgetcharを
使ってやればいいというのはヘルプを見てわかったんですが、その使い方の内容がいまいち
わかりません。できれば例題でプログラムを書いていただけると嬉しいです。
人のレスを勝手に使ってすいません!


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

fget()やgetchar()でダイアログ上のデータを取得しようとするのは無理なんじゃないでしょうか。
fget()はファイルから、getchar()は標準入力からのデータ取得となります。
MSDNに記述がありますので、ご確認ください。

「ダイアログボックス内に入力された」とありますが、
これは「ダイアログ上のエディットボックスに入力された」と解釈します。
手法はいくつかあると思いますが、
①DDEを使ったCWnd::UpdateData()によるデータ取得
②GetWindowText()によるデータ取得
がよくあるパターンなのではないでしょうか。

あと、この質問は新規に発言したほうがいいですね。
表向きには、へぼさんが質問していることがわかりにくいですし、
立石さんの質問に対するやりとりもわかりにくくなってしまいますから。


返信引用
立石
 立石
(@立石)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

無事、解決することが出来ました。

協力してくれた方、どうも有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました