• 締切済み

テキストファイルの変更

以下のようなデータファイルを読み出して DATA_Aの値を123から567890に変更しようと した場合、一時ファイルを作成してから data.txtにリネームする以外にどのような方法が ありますか? # データは可変長のテキストファイルとします === data.txt === DATA_A=123 DATA_B=ABCDE

みんなの回答

回答No.4

もし自分が作るとしたら、と考えたら 読み元のファイルサイズが小さければ 一気にすべてのデータをメモリ上に展開して 加工して、また一気に書き込みますね。 ファイルが大きければ やはりテンポラリファイルを作成するなりして 少しずつ繰り返し加工すると思います。 CSVファイルって結構汎用的な形式なので 便利なAPIやライブラリがあるかもです。 私は残念ながら存じませんが

yasuch
質問者

お礼

今回はメモリのガーベージコレクトもできないような 制約があるので、やはりテンポラリファイルを作って 変更することにします。 みなさん回答ありがとうございました。

回答No.3

WritePrivateProfileString の間違いでした。

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_writeprivateprofilestring.asp
回答No.2

Windows限定ですが SetPrivateProfileString API一発で終わらせます。 iniファイルの構造と似てますし。 一時ファイルを作成する必要もありませんし。

yasuch
質問者

お礼

Windows&このフォーマット限定であれば 確かにAPIで行けます。 このAPIってどんなアルゴリズムで実装されて いるのか気になるところです。 たとえばCSVでも対応できる手段となると、 一時ファイルかメモリ展開しかないんで しょうか...

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

>一時ファイルを作成してからdata.txtにリネームする以外にどのような方法がありますか? データファイルの大きさに対し、相対的にメモリリソースに余裕があれば、いったんデーターを全部メモリに読み込み、加工したデータを元のファイルに書き戻す手段が使えます。

yasuch
質問者

お礼

回答ありがとうございます。 たしかに、一時記憶をファイルにするかメモリに するかという選択肢はありそうですね。

関連するQ&A