行をまたいだ文字列の抽出

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mo-fu

行をまたいだ文字列の抽出

#1

投稿記事 by mo-fu » 6年前

久しぶりの書き込みで、ツールバーが付いているので驚きました。

さて、今回の質問なんですが、input fileであるtxt fileとして

コード:

 3412,-2.2527125671,-2.5197635362\H,-6.1426202522,-1.3862235333,-2.4532/*全ての行の頭に必ず半角スペース有*/
 896229\H,-4.6166481975,-0.4945804228,-2.3950492434\\Version=EM64L-G09R
 evA.02\State=1-A\HF=-850.7642084\RMSD=5.756e-09\RMSF=8.222e-07\Dipole=
 -0.3135366,-0.3855065,0.474408\Quadrupole=-6.8696605,11.9721141,-5.102
 4536,-3.4284495,-3.6338237,-2.1560812\PG=C01 [X(CHO)]\\@
というようなものがあるとします。(実際は数MBのtxt fileで、前後には多くの文字列が存在しています。)
私が欲しいのは、三行目中ほどに位置しているHF=-850.7642084部分です。
例に挙げたように HF=数値 が一つの行に行儀よく入っていてくれれば、各行を配列に押し込んだ後、’HF=’で検索をかけて数値を読み取るのですが
困ったことにこのHF=数値部分は

コード:

H
 F=数値
又は
HF
 =数値
又は
HF=
 数値

など改行を挟んでいる場合も多々あります。

こういう場合を含んだファイルでも柔軟に対応する(つまり、HF=数値を読み取る)にはどういう手があるでしょうか
御教授いただけると助かります。

OS: windows7
環境:Microsoft Visual Studio 2010
使用言語: C or C++ です。

アバター
usao
記事: 1569
登録日時: 6年前

Re: 行をまたいだ文字列の抽出

#2

投稿記事 by usao » 6年前

1文字ずつ読んで行って判定すれば良いのではないでしょうか?

最初はHを見つける状態
 ↓    ↑
Fを見つける状態
 ↓
=を見つける状態 → 最初の状態
 ↓
値を読み取る状態
 ↓
読み取り終了

という風に状態遷移とかしてやればどうでしょう.

↓はCSVの話ですが,参考になると思います.
http://codezine.jp/article/detail/5531

mo-fu

行をまたいだ文字列の抽出[追記]

#3

投稿記事 by mo-fu » 6年前

すみません追記です。

更にいうと

コード:

HF=-850.76
 42084
のように、数値部分が改行で分離している場合もあります。

mo-fu

Re: 行をまたいだ文字列の抽出

#4

投稿記事 by mo-fu » 6年前

usao様

早速の返信ありがとうございました。確かに、それで最初の問題は解決できそうです。ありがとうございます!

追記に書いた数値がスプリットしてしまう場合は
'='を探す→数値を改行・スペースを無視して読みこむ→'\'が見つかったら終了

で何とかなりそうですね

言われてみるととても簡単なことでした、ありがとうございましたゥヮ━。+゚ヽ(・´Д`・)ノ゚+。━ァァン

閉鎖

“C言語何でも質問掲示板” へ戻る