
C++でテキストファイルを読み込む処理に行き詰ってます。
for( ; msgfile.eof() == 0; )
{
msgfile.get(str, strlen(header)+1 );
// 行の最初の8文字を取り出す (A)
if( strcmp(str, header ) != 0 ) {
// 先頭8文字がheaderと一致しないと
// その行は読み飛ばす
if (msgfile.getline(str, 256)) {
//空行でない場合は(A)に、戻る
}
else {
msgfile.get(); //空行の場合、永遠に当該行をリードしてしまう
//空行の場合も(A)に戻るようにしたい
}
}
else
//先頭8文字がheaderと一致した場合の処理
}
上記のmsgfile.get();で、msgfileの空行を永遠にリードし続けます。
msgfileの次の行をリードする処理はどのようにすればよろしいのでしょうか。
(forループを抜けたいわけではありません)
No.3ベストアンサー
- 回答日時:
ifstreamって、一度failbitとかが立つと、clearするまで読み込みできなくなるみたいですね。
ご回答ありがとうございました。調べてみるとmsgfile.getでは改行のみの行でfailbitがたつようですが、msgfile.getlineでは改行のみ行でも改行コードを読み込んで次の行に進みました。よって次のように修正したら、うまくいきました。
ifstream::pos_type pos;
for( ; msgfile.eof() == 0; )
{
pos = msgfile.tellg(); // 位置を保存
msgfile.getline(str, 256))
if(strncmp(str, header, strlen(header)) != 0){
//何もせずに次の行へ
} else {
msgfile.seekg(pos);//ファイルポインタを戻す
msgfile.get(str,strlen(header)+1);//最初の8文字取得
//以降、他処理を行う
}
}
failbitを意識して調べたらわかりました。
No.4
- 回答日時:
そういう仕様ですね>#3. 規格にも「いったん立った failbit を落としてから読み込む」コード片が書かれてますし.
さておき, ちょっとファイルの仕様がどうなっているのかも気になった. 例えば header が "ABCDEFGH" のとき
AAAAAAAsomething wrong
(※ここは空行です)
ABCDEFGHthis is good
(以下省略)
みたいなフォーマットになっているのでしょうか? そして, このようなフォーマットで「空行を永遠にリードし続け」るということでしょうか? もしこういうフォーマットだとしたら
AAAAAAAAsomething wrong
(※ここは空行です)
(※ここも空行です)
ABCDEFGHthis is good
とか
AAAAAAAAsomething wrong
ABCDEFGHthis is good
の場合, あるいは
AAAAAAAAここはとっても長い行なんだと思ってください具体的には300バイトくらいの長さになってる行だったりするといろいろプログラムに問題があって困りそうなんだよねそろそろ300バイトは越えてくれるかなもうちょっとあった方がいいかなああもういい加減面倒だからこれで止めることにしておくけどこれで足りなかったらもっと長くしてくれ
(※ここは空行です)
ABCDEFGHthis is good
だったらどうすればいいんだろうか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Java Java 南京錠 2 2023/02/04 11:46
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++とVB6を混在させてプ...
-
異なるプログラミング言語を連...
-
ソートにかかった時間を測りたい。
-
win10で、正確な待ち時間の作り方
-
プログラム 擬似コードとはどん...
-
エクセルVBAをマスターしたい
-
非同期プログラミングは必ずマ...
-
逆ポーランド記法における単項...
-
VBAのデータ型に関する質問...
-
論理的処理ってなんですか?
-
.netからexcel操作の処理速度が...
-
pgmファイルをC言語で読込、処...
-
WIN2Kと98・MEのアプ...
-
プログラム上のCPU稼働率低減に...
-
再帰呼び出しを使いますか?
-
Excelでのセル内容の高速消去方法
-
散布図グラフの近似線追加後に...
-
Excel(VBA)でSetTimer関数を使...
-
Javaで再帰アルゴリズムを作る...
-
テキスト処理の速度の速い言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
SQLの速度をあげるには・・・
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
ノットイコールを教えて下さい
-
Excel(VBA)でSetTimer関数を使...
-
Excel VBA での処理時間計測結...
-
Excel VBA データ削除の高速化
-
If Not c Is Nothing Then ~延...
-
実行時のCPU使用率を増やしたい
-
基本情報技術者試験詳しい方へ...
-
テキストファイルの空行をスキ...
-
プログラム上のCPU稼働率低減に...
-
ナップザック問題?をエクセル...
-
VBでの簡易電卓の作成(減算方...
-
絶対パスの取得について
-
VC++2010 GDIオブジェクトの解...
-
VB.NETにおける二値化処理の高速化
おすすめ情報
早速のレスポンスありがとうございます。msgfileはifstream型です。この型のファイルの空行をスキップする方法を知りたいです。ちなみにignoreは試したのですがうまくいきませんでした。