- ベストアンサー
【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい
いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。 すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default); while(sr->Peek() >= 0){ //csvデータ分繰り返し strLine = sr->ReadLine(); //1行読み込み strData = strLine->Split(delimiter); //「,」で区切って、配列に分解 if (iWorkNum == int::Parse(strData[0])){ strData[2] = strWorkTime;//書き換えたい箇所はここだけ //※ここからの処理方法を教えて下さい。 } } } sr->Close(); fs->Close();
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CLRはよくわからないので直接的な回答はできませんが…… >希望としては、ファイルの一箇所のみを書き換えたいので、 >書き込み専用のファイルを用意して、読み込みファイルを >一行、一行コピーしたくないです。 書き換え前後でサイズが変わらない場合のみしかその方法は採れませんが大丈夫なんでしょうか? 例えば 収入,10000 を 収入,20000 の場合は可能ですが、 収入,10000 を 収入,100000 の場合などは不可能です。
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 読み込みファイルと書き込みファイルは別にした方が > 良いものなのでしょうか。 あるいは - 全部読んで - 一部変更して - 全部書く
お礼
ご回答、ありがとうございます。 やはりサイズが変更になると、全部の書き直しが必要なのですね。 今回の問題は、入力用、出力用のファイルを分けて 対処します。 アドバイスありがとうございました。
補足
早速のご回答、ありがとうございます。 ファイルサイズが変わらない場合のみしか 私の要求方法が実現できないとは、全く知りませんでした。 ちなみに今回書き換えたいデータは、String型で時間を表す 「00:00:00」のような値なので問題ないと思います。 しかし、「0:0:0」といデータが入力されることを考えると、 やはり、読み込みファイルと書き込みファイルは別にした方が 良いものなのでしょうか。