リストビューに表示されているアイテムを
ファイルに出力するプログラムで質問があります。
(「出力」というボタンを押すと、*.txtというファイルが出来上がってきます)
問題は、ファイルが出来上がった中身を見てみると
複数行あるリストビューをファイル出力したときに
ファイル出力されたテキストファイルの内容が、
リストビューに追加された最新行(一行目)に上書きされてしまいます。
iListC = m_ListData.GetItemCount(); //リストビューアイテム数取得
for(int i = 0; i < iListC; i++)
{
//ここでファイルへ書き込み処理
//改行処理も追加
}
こんな感じに組んでいます。
リストビューのアイテム数、ループさせているのに
テキストファイルに出力すると、1行目も、2行目も全て同じ内容になってしまいます。
どうしたら、リストビューに表示されてる行のアイテム通りに
テキスト出力されるようになるのでしょうか?
よろしくお願いします。
ーーー
WinXP
MFC
ーーー
> //ここでファイルへ書き込み処理
> //改行処理も追加
このコードを見てみないとなんとも回答できないかと。
>WinXP
>MFC
ついでに VCのバージョンも載せてください。
iListC = m_ListData.GetItemCount(); //リストビューアイテム数取得
for(int i = 0; i < iListC; i++)
{
//ここでファイルへ書き込み処理
//改行処理も追加
}
もっとも肝心なファイルへ書き込み処理が
コメントで隠されているので吟味のしようがありません。
説明不足で申し訳ないです。
下記に追記します。
ファイル書き込み処理
for(int i = 0; i < iListC; i++)
{
CString csList;
csList.Format(%s,%s,%s,m_ListItem1,m_ListItem2,m_ListItem3);
csList += \r\n;
stdFile.WriteString(csList);
}
VCのバージョンは、6.0です。
>m_ListItem1
>m_ListItem2
>m_ListItem3
ってなに?
csList.Format(%s,%s,%s\n,
m_ListData.GetItemText(i, 0) // i番目の左端のデータ
m_ListData.GetItemText(i, 1) // i番目の真ん中のデータ
m_ListData.GetItemText(i, 2));// i番目の右端のデータ
ってやんないとダメなんじゃないの?
>Blueさん
m_ListItem1の中に、リストビューで表示する値が入っています。
テキストボックスとかから取ってきた値なのですが・・・。
GetItemTexのメンバ変数を使って、やってみようと思います。
ありがとうございました。
> m_ListItem1の中に、リストビューで表示する値が入っています。
> テキストボックスとかから取ってきた値なのですが・・・。
だとしたら、for-loopの中でi番目の値を入れてあげないと、
同じのが並ぶのはアッタリマエよね。
解決しました!
ありがとうございました!
なんとなく納得できていないようなので補足。
m_ListItem1、m_ListItem2、m_ListItem3は、リストビューで表示する値が入っています。
だそうですが、書き込みのループの中で上記の値を変数iが変化する毎に更新する処理は
入っていないようですけれど、これでどうして毎回違う情報が書き込まれると思ったんで
しょう?
変数の中身と言うのは自分で更新しない限り変化する事はありません。
具体的に言うとm_ListItem1に代入するとか関数を使ってm_ListItem1にセットするとか
しないと値は変化しないのです。
値が変化していない状態で何回もファイルに書き出しても同じ内容が書き出されるのは
当たり前の話です。
この辺は、デバッガでそのループ内でステップ実行してみればわかると思いますよ。
毎回、同じ内容で書き込んでいるのが確認できるはずです。
とにかく、うまく行っていない状況がいったいどうしてうまく行っていないのかを
理解する所からはじめてください。理解しないでεπιστημηさんの言った通りに
してうまく行っても意味がありません。
バグの修正の肝は、バグの原因を理解してその原因を取り除くことです。
場当たり的な対処療法をバグの修正とは言いません。
うわっ、間に合わなかった。
これも読んでもらえないかもー。(T-T)