1

私はostream、istream、iostream、およびfstreamを見てきましたが、他のピエロがテキストエディターで実行できるように、入力または出力テキストファイルから行を単純に削除する方法をまだ完全に理解できません。

たとえば、次のようなファイルがある場合

box 1\n
socks\n
box 2\n
pajamas\n
box 3\n
textbooks\n\eof

など、2番目のボックス(3行目と4行目)を完全に削除して、テキストファイルが次のようになるようにします。

box 1\n
socks\n
box 3\n
textbooks\n\eof

明らかに、一時ファイルを作成し、保持したいものだけをその一時ファイルに配置し、元のファイルを削除してから、一時ファイルの名前を元のファイルの名前に変更する必要があります。これは問題なくダンディであり、実際にはすべてのプログラムがドキュメント編集を処理する方法であることを理解しています。しかし、それはコーディングするのが面倒な苦痛です。

私が本当にやりたいのは、テキストを操作するたびにこれらすべてのフープをジャンプすることなく、存在するものを操作することです。これは、並べ替えて編集するものが大量にあるためです。

ですから、これは私がアドバイスを求めている私の仮説です。ファイルを開いたときに、ファイルの内容全体を文字列、ベクトル、動的に割り当てられたchar配列、またはおそらく文字列ストリームに格納して、ファイルの一部を簡単に削除して再配置できるようにする方が簡単でしょうか?次に、編集したテキストを一時テキストにダンプし、元のテキストを削除して、一時ファイルの名前を元のファイルの名前に変更します。

これには妥当性がありますか、それとももっと簡単な方法がありますか?私は最初の推測としてベクトルを使いたくなります。

[編集]私が扱っているファイルは、データのチャンクを簡単に操作するための構造体を使用する価値があるほどうまく整理されていないことに注意してください。それは散文の巨大な段落、または無意味な数字の文字列である可能性があります。

4

1 に答える 1

1

std::list多くの行と多くの変更がある場合は、ではなくを使用したくなりますstd::vector

頻繁に削除または挿入する場合は、行を再配置する必要があります。でそれを行うと、std::vectorよりもコストがかかりstd::listます。

于 2013-01-30T21:35:17.743 に答える