• ベストアンサー

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

初心者ですが、下記の機能を実現したいです。 あるテキストファイル 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

  • ファイルから検索&抽出

    初心者ですが、下記の機能を実現したいです。 あるテキストファイル example.txt ************************************************** ID .   ・・・Tokyo・・ . // ID . . // ID . .  ・・・Tokyo・・・ ************************************************* このテキストファイルの中に Tokyo がキーワードででてくる段落の「ID~//」の部分を取り出して、出力したいです。 どのようにすれば出来ますでしょうか? おしえてください! お願いします。

    • ベストアンサー
    • Perl
  • rubyでPDFファイルを読みたい

    PDFファイルを、rubyで読み込みたいのですが、 そのようなことを可能にする方法(ライブラリ)は、ありますでしょうか? つまり、 f = open "index.txt" f.each do |line|  puts line end この場合の「index.txt」が、テキストファイルでなく、 「index.pdf」というPDFファイルだった場合にも 同様の出力結果を期待したい、ということです。 (バイナリデータではなく、テキストデータを出力したい。) 実現手段をご存知の方がいましたら、何卒、教えて下さい。

  • テキストファイルの中身について

    あるフォルダしたのテキストファイルとそのファルダしたのフォルダ中のテキストファイルについて、 例えば、”日本”と言う文字が有ったら、そのテキストファイル名を表示するようなの機能を実現したいです。 何を使ったら、いいですか? サンプルが欲しいです。 教えてください!お願いします。 ーーーーーーーーーーーーー temp-------a.txt |------b.txt |------temp1 |--------a1.txt |--------b1.txt       … などなど、 テキストファイルの中身に、”日本”という文字が存在したら、そのテキストファイル名を出力 ーーーーーーーーーーーーー

  • 教えて!ファイルの操作

    計算結果をテキストファイルへ書き込んで出力したいです。 一つのファイルへ出力の場合、ファイル名を指定(output.txt)して、出力は出来ますが、 ループ(i:1から10まで)を使って、ループの循環と共に、(output1.txtからoutput10.txt)のように出力したいです。 ファイル名は変わりますから、上記の操作はできますでしょうか。 教えてください! お願いします。

  • teraterm から起動したプログラムの出力結果を得たい

     teraterm のマクロから exec でテキストを出力するプログラムを起動し,その出力結果をテキストとして保存したいと思っています.  上を実現するために下のようなマクロを作ったのですが,出力結果をテキストファイルとして得られません(下の例では,a.txt が作られません.またはどこに作られているかわかりません). > cmd = 'ipconfig >> a.txt' > exec cmd  マクロを実行すると一瞬黒い画面が見えるのでコマンドは実行されていると思います.何か間違っているのでしょうか.

  • ファイルから1行または複数行を標準出力する方法

    ものすごく簡単な問題のような気がしますが,わかりません. コマンドで,テキストファイルから1行または複数行を標準出力する方法はありませんでしょうか? 例えば,foo.txt の10行目を出力 > line 10 foo.txt あるいは,複数のコマンドをパイプをかませて実現する方法でもかまいません. スクリプト言語すら使わないで実現できるような気がするのですが思いつきませんでした. よろしくお願いします.

  • テキストファイルからの抽出

    VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。

  • diffコマンドにてテキスト出力

    こんばんは。教えてください! 以下のような2つのファイルがあるとします。 ・aaa.txt abc111 abc222 abc333 ・bbb.txt abc333 abc444 これを比較して、比較結果をテキスト出力したいです。 テキスト出力したい比較結果は (1)重複しているもの全てテキスト出力 (2)aaa.txtのみにあるものをテキスト出力 (3)bbb.txtのみにあるものをテキスト出力 また、(1)~(3)は別々のファイルに出力したいです。 diffコマンドで、 diff a.txt b.txt >> c.txt とすると、 1つのテキストファイル(c.txt)に (1)~(3)すべてが書かれてしまいます。 環境は、windows XPにてCygwinを使用しています。 diffコマンドでなくても構いません。 宜しくお願いします。

  • テキストファイルから最終行の抽出

    テキストファイルに出力された内容のうち、 最終行のみ抽出し、他のテキストファイルに 落とし込みたいと考えています。 DOSコマンドを使用して実現したいと思うのですが 良い方法などございましたら、ご教授ください。 宜しくお願い致します。 ※OSはWindows Server 2003を使用しています。

  • txtファイルの数字を計算

    ファイル test.txt 内容(数字と数字の間はtab) 1 2 3 4 5 6 7 8 9 1   ・   ・ 3 5 2 3 6 1、以上のテキストファイルの各行の総和を   計算し書き出すにはどうしたらいいですか? 結果 15 31 ・ ・ 19 2、各行の左から4番目、5番目を掛けた結果を   計算してかい出すにはどうしたらいいですか? 結果 20 9 ・ ・ 18 宜しくお願いいたします。

このQ&Aのポイント
  • TS8030の縁なし印刷ができない理由を解説します。MACで使用している場合、CANONのドライバもインストールされていることが前提ですが、設定上は問題なく縁なしの画像にもなっているはずです。しかし、実際に印刷すると縁がついてしまうことがあります。
  • この問題の原因として考えられることはいくつかあります。まず、用紙サイズが正しく設定されているか確認しましょう。L版縁なしを選択しているかどうかも確認してください。また、印刷設定画面内のイメージでは縁なしになっているが、実際の印刷時に余白が加えられる場合、印刷プリンタの設定が原因かもしれません。
  • さらに、ハードウェアやソフトウェアの問題も考えられます。プリンタのドライバが最新版であるか確認し、更新が必要な場合は行ってください。また、MACの設定やソフトウェアの設定にも問題があるかもしれません。MACのバージョンが最新であるか確認し、設定を見直してみてください。
回答を見る