• ベストアンサー

テキストファイルを読み込んで新たなファイルに書き出すには?

最近C++を始めたばかりの初心者なのですが、「テキストファイルの中の空白をタブコードに変換して、新たなファイルに書き出す。」という事をやりたいのですが未熟ゆえに、サッパリわかりません…。どのようにすれば出来るのでしょうか?サンプルとして書いていただけると助かります。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

課題かな? そうじゃなかったら失礼。 テキストファイルの入出力については基本中の基本なので割愛します。 「C++ テキストファイル操作」で検索すればサンプルソースが見つかるはずです。 空白←→タブ変換は闇雲に変換するとタブ位置がずれます。 タブは「○個の空白」ではなく「次のタブ位置まで飛ばす」という意味なので、タブ位置を把握しておく必要があります。 簡単な方法としては、「一行の最大文字数と同じ長さの配列(char配列でで充分)を定義し、タブ位置にマークを入れておく」という方法があります。 「ソフトウェア作法」(共立出版)という本にアルゴリズムの解説があります。 サンプルソースはratfor言語なのでサンプルソースよりもアルゴリズム解説を読んで参考にすると良いでしょう。

参考URL:
http://www.yfcbookshelf.com/software's%20books6.htm#ソフトウエア作法
liontk
質問者

お礼

空白の変換という事で混乱していましたがわかりました。実際に何とか出来ました。ありがとうございました。

その他の回答 (2)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

このぐらいの処理内容でさっぱりわからないところを見ると、かなりの初心者だと思います。 となると、練習用のプログラムかな。実用性はあまり考えなくてもいいんですよね? (偉そうに書いていますが、私C++はほとんどわかりません。でもCならわかるので回答させてください。) OSや開発環境がわからないので、標準入出力を利用したコンソールプログラムを作成するとして話をすすめます。(楽なので...) 例えば、Windows上だったらDOS窓で conv <input.txt >output.txt などとコマンドを叩くとinput.txtのデータに対して変換を行い、output.txtに出力するというようなものです。(このような変換用プログラムをフィルターと呼びます。) 基本的な処理手順は次のとおりです。 (1)標準入力から行単位でデータを読み込む (2)データの中から空白を検索し、タブに変換 (3)変換後のデータを標準出力に出力 別に行単位じゃなくてもいいです。適当にやってください。 UNIXでも同様の方法が使えます。

回答No.1

使ってるOSがUNIX系ならば、ずばりそのもののコマンドがあります。 unexpand です。 WINDOWSでも cygwin を入れれば一緒に入ってくると思います。

参考URL:
http://www.linux.or.jp/JM/html/GNU_textutils/man1/unexpand.1.html

関連するQ&A