- PR -

非常に大きなテキストファイルの編集

投稿者投稿内容
ForgetMe
会議室デビュー日: 2004/03/25
投稿数: 7
投稿日時: 2004-08-27 19:40
非常に大きなテキストファイルの内のたった一行を書き換えたいとき
みなさんはどのようにしてますか?

全部読み込んでから、書き換えますか?
なんかいい方法ってありますか?
ForgetMe
会議室デビュー日: 2004/03/25
投稿数: 7
投稿日時: 2004-08-27 19:42
追伸:.NET上での話しです
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-28 06:36
 その1行を、どうやって特定できるのでしょう?また、どのような種類のファイル(ただのテキストなのか、バイナリなのか、XMLなどの整形ファイル)なのか、書き換えをどのように行えるのか(同じバイト数を上書きできるのか、不定バイト数なのか)、、、ざっと思いつくだけでも、これくらいの要素によって異なります。
m.ku
大ベテラン
会議室デビュー日: 2002/09/15
投稿数: 184
投稿日時: 2004-08-28 08:14
加えて言うなら、非常に大きなテキストとはどの程度のサイズ?
数10GB程度あるようなもの(一例)ならデータ形式自体を考え直せという話にも発展します。
データサイズというのはアプリケーションの適用範囲に大きく影響しますので
具体的なサイズというのは重要です。万能というのを目指せば逆に使い物にならない
ものを作ることに繋がることが多いので。
ForgetMe
会議室デビュー日: 2004/03/25
投稿数: 7
投稿日時: 2004-08-28 10:47
返信ありがとうございます。

Jittaさん>どのような種類のファイルなのか
ただのテキストファイルを考えてます。

m.kuさんの指摘通り、どんなファイルサイズにも対応というのは逆に使い物にならないので、数MB程度の(まぁ〜テキストファイルにしては結構大きい方)ものを想定してます。そのファイルは一行一データみたいな形式です。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-08-28 11:16
unibon です。こんにちわ。

引用:

ForgetMeさんの書き込み (2004-08-28 10:47) より:
m.kuさんの指摘通り、どんなファイルサイズにも対応というのは逆に使い物にならないので、数MB程度の(まぁ〜テキストファイルにしては結構大きい方)ものを想定してます。そのファイルは一行一データみたいな形式です。


#プログラム上での編集ということですよね(ツールを探しているということではなく)。
UNIX の流れを汲む OS(Windows 等も)のファイルシステムは、行単位で書き換えるという機能は持っていません。バイト単位での書き換え機能は備えていますので、1行のバイト数が固定ならばできるのですが、普通のテキストファイルは可変なので、ダメです。
また、たとえテキストファイルの1行のバイト数を固定して、バイト単位の書き換えで良いとしても、書き換えている最中にプロセスが落ちたりすると、ファイルがソフト的(論理的)に壊れますので、あんまり上書きはしないです(やることもありますけど)。全部読み込んで→メモリ上で編集して→新しいファイルに書き込んで→元の古いファイルを削除して→新しいファイルを元のファイルの名前にリネームする、ということが多いです。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-28 13:14
誰がそのたった一行を決めるのでしょう?
1)画面で見てユーザーが変更する。
2)変更したい行は文字パターンが決まっているので検索で見つける。
3)何行目かはわかっているのでその行を差し替える。
4)その他

仕様があやふやなままではいい意見は出ないと思います。
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
ForgetMe
会議室デビュー日: 2004/03/25
投稿数: 7
投稿日時: 2004-08-28 13:49
unibonさん返信ありがとうございます。
やはり、メモリ上に格納してからという結論ですね。大変参考になりました。

えムナウさん返信ありがとうございます。
仕様があやふやで申し訳ありません。
その一行を決めるパターンとしては、2番と3番が多いです。
数MBのテキストデータが数百あって、
ある特定のファイル名のもの(もしくはファイルデータの先頭に特定の文字列が入ってるもの)は3番で書換え、
あとは2番で書き換えるといったプログラムです。

2番と3番ができるようになったら1番の機能もつけたいです。といったところです。
これから 仕様を詳しく書く努力をします。指摘どうもありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)