• ベストアンサー

教えて!ファイルから必要な情報の抽出

初心者ですが、下記の機能を実現したいです。 あるテキストファイル information.txt ************************************************** RELATIVE WEIGHTS LAB. CLOCK 53154 53184 53214 53244 53274 53309 USNO 35 394 0.000 0.000 0.000 0.020 0.020 0.021 USNO 35 120 0.000 0.000 0.000 0.000 0.261 0.384 USNO 35 152 0.000 0.000 0.000 0.000 0.008 0.010 USNO 15 5561 ***** ***** 0.000 0.000 0.000 0.000 . USNO 15 5564 ***** ***** 0.000 0.000 0.000 0.000 . USNO 35 148 ***** ***** ***** ***** 0.000 0.000 . USNO 35 114 ***** ***** ***** ***** 0.000 0.000 . USNO 35 156 ***** ***** ***** ***** 0.000 0.000 . VSL 35 179 0.509 0.711 0.781 0.818 0.705 0.000 . VSL 35 548 0.374 0.363 0.348 0.344 0.389 0.377 VSL 35 731 0.379 0.395 0.411 0.486 0.483 0.398 VSL 35 456 0.837 0.853 0.743 0.735 0.977 0.757 ************************************************* このテキストファイルの中、 USNO VSLなど がキーワード、 キーワードで始める行の最後の数字を取り出して、同じキーワードの数字を足し算して、 結果をキーワードと足し算の結果を出力したいです。 出力結果 ***************************** USNO 2.55 VSL 6.32 ****************************** のように出力したいです。 出来ますでしょうか? おしえてください! お願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3です。とりあえず、Perlで作ってみました。 Perl sum.pl information.txt で実行 sum.pl ----------------------------- while(<>){ @data = split(/\s+/,$_); if($#data== 9){ #データとなる行には、データ列数が9ある、ちょっと嘘? $sum{$data[1]}+=$data[9]; #$data[0]は、空 } } for( keys %sum){ print "$_ $sum{$_}\n"; } -------------------------------------------- Cでもできるけど、Perlに比べたら色々面倒クサい

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

できますよ、 どっちかというとPerlとかでやった方が簡単だと思いますが。 最後の数値というのは、8番目の数値と考えていいのでしょうか? ピリオドがある行の場合、ピリオドが最後の数値で0にするのでしょうか? *****のように数値でない場合もあるのでしょうか?

回答No.2

出来ますでしょうか?と聞かれればできますが、仕様がいまいちわかりません。 RELATIVE WEIGHTSとかLAB.っていうのもキーワードでしょうか?9行目~15行目ぐらいの行末にあるごみみたいな点も数値なのでしょうか??データの途中で改行されて2行以上になったりしますか??? ついでに、ファイル開く→データ切り出しながらキーワードごとに足し算→表示のどのへんが分かりませんか?

回答No.1

そういう機能を実装しようとすると、どういう処理をしなければならない、と思いますか?それができれば、半分以上できています。それがわからないなら、この仕事、辞めた方がいいですよ。 ↓こんな感じに分解していく ↓それからC言語に翻訳していく ↓こういう質問の多くは、この分解ができていない 全体  ファイルを開く  ファイルが終わるまで、1行読み込む   空白で文字列を分ける   先頭のキーワードを取り出す   キーワード別に足し込む処理  ループ終わり  ファイルを閉じる 関数終わり 空白で文字列を分ける  1文字取得   空白か?    はい:バッファから配列へ移動し、バッファクリア    いいえ:バッファへ  ループ終わり  文字列の配列を返す 関数終わり キーワード別に足し込む処理  配列の数だけ   合計の配列へ足し込む  ループ終わり 関数終わり

関連するQ&A

専門家に質問してみよう