改行はどう発見する?

[戻る]
改行を入れたい 2010/06/12(土) 19:29:30
VC++6で
ファイルの中の文章の変換をやっています。
改行コードを見つけたいのですが、
どのようにすればいいのでしょうか?
また、自分が付け加える文字列に
改行自身も入れたいのですが、

例えば下記で、
** 0004とか**  0005
の後に、次の//が続くのではなく、
改行を入れた上で、
続けたいのです。
どうすれば?


                      **  0004//
                                                                  **  0005//
                                                                  **  
0006//           -  Function
                                            **  0007//                 Compute 
Frequency Characteristics from Wavewforms by Each Time-Frame
                                                            **  0009

tenteku 2010/06/14(月) 10:19:52
前者は一文字ずつ読み込んで改行を見つければいいのでは。

そんなやり方めんどくさい!嫌だ!!ってなら
後者の変換処理を含め環境を新しくしてboost::regexって手もあります。
VC6だとregexは使えなかったはず。
http://homepage3.nifty.com/kaku-chan/boost/regex/chapter_003.html
が参考になりますかね。

PATIO 2010/06/14(月) 18:49:41
基本はtentekuさんが書かれたとおりでしょう。

一番単純な実装は一文字ずつチェックすると言う事になります。
ただ、ここで言っている改行と言うのが文字コードで何に当たるのか
と言う部分をきちんと決めないといけないと思いますけれど。

Windowsで一般的な例からいくとCR+LFになるのでしょう。
CRとLFって何って言う場合は、そこから調べる必要が有りますけれど。
この辺はファイルを開く時のモードとか色々絡むので
一概にどうせよとは言えないのです。
つまりその辺の関数回りの使い方から勉強しないといけないよ
と言う話になります。

PATIO 2010/06/14(月) 18:53:11
VC++6.0の環境を使わないといけない理由がないのなら
新しい環境を使った方が良いような気もします。

VC++6.0のコンパイラはC++言語の規格に対する準拠率が低かったので
最近のC++言語の文法書ではできる事が出来なかったりします。
MFCを使う必要が無いのであれば、Express Editionと言う選択肢も
あるんですけどね。

ITO 2010/06/15(火) 09:26:56
うーーん、
1. 必要な領域をnew等で確保する。
2. ファイルのバイト数をチェックする。(多い場合はエラー終了)
3. 一バイトづつ0x0d,0x0aをチェックして削除する。
4. 改行が必要なところに0x0d,0x0aを挿入する。
5. 処理の終わった配列をそのままファイルに書き込む
ですかね?
まー、一行づつ読み込む方法もありますね。

古いスレッドには追加発言できません。