• 締切済み

数値の抽出方法がわからず困っています

テキストデータの処理がうまくいかず困っています。 ----------------------------------------------- a:0.001 b:-11.111 c:50.5 d:-12.345 ----------------------------------------------- といった文字列から ----------------------------------------------- 0.001 -11.111 50.5 -12.345 ----------------------------------------------- といった形で符号や小数点を含めて抽出したいのですが どのようにするのが良いのでしょうか。 各値は、それぞれの値がスペースによって区切られています。 また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。 split や substr を用いてやろうとしているのですが、 なかなか思ったとおりの形で出力できません…

  • Perl
  • 回答数3
  • ありがとう数1

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

リストコンテキストで、gフラグをつけてマッチを実行すれば数値の部分だけ取り出すのは簡単にできます。 use strict; use warnings; use feature 'say'; use Regexp::Common; while (<DATA>) { chomp; my @numbers = /$RE{num}{real}/g; say join ' ', @numbers; } __END__ a:0.001 b:-11.111 c:50.5 d:-12.345 a:0.001 b:-11.112 c:50.5 d:-12.346 a:0.001 b:-11.113 c:50.5 d:-12.347 実行結果: 0.001 -11.111 50.5 -12.345 0.001 -11.112 50.5 -12.346 0.001 -11.113 50.5 -12.347 Regexp::Commonをインストールする必要がありますが、#2のTacosanさんが 示されているような正規表現を使えばRegexp::Common抜きでも同様のことが可能です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

/([+-]?(?:(?:\d*\.)?\d+))/g; にマッチさせてみるとか. または tr/0-9+.-/ /cs; で不要な文字をつぶしてから split など.

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

split(/[\sA-Za-z:]+/,文字列);を使用します。 以下サンプル while(<DATA>){ @elm = split(/[\sA-Za-z:]+/,$_); print $elm[0],"\t",$elm[1],"\t",$elm[2],"\t",$elm[3],"\t",$elm[4],"\n"; } __DATA__ a:0.001 b:-11.111 c:50.5 d:-12.345 a:0.001 b:-11.112 c:50.5 d:-12.346 a:0.001 b:-11.113 c:50.5 d:-12.347 実行結果は 0.001 -11.111 50.5 -12.345 0.001 -11.112 50.5 -12.346 0.001 -11.113 50.5 -12.347 となります。 $elm[0]は数値が入りませんので、使用しないで下さい。 $elm[1]~$elm[4]に目的の数値がはいります。

関連するQ&A

  • エクセル 数値だけ抽出するには?

    エクセルで、文字列+スペース+数字と入力されているセルから数値だけ取り出す方法を教えていただけますか? 文字列とスペースの字数は一定で、数値の桁数は6-8桁と変動します。 A列からb列のように変換したいのです。 A列          B列 PMID:_12345678    12345678 PMID:_123456     123456 宜しくお願いいたします。

  • EXCEL セル内の数値から、5桁目だけを抽出する方法について

    EXCELシートのセル内に、以下のような30桁からなる数値が入力されている 列が複数あります。 この列内の数値の右端から「5桁目」だけ、または左端から「10桁目」だけを 抽出したいと思っているのですが、EXCELの仕様で数値の先頭にある「0」は 表示されないため、各セルごとに表示されている数値の桁数はバラバラです。 数値の先頭に「0」が付いているセルが多数あり桁数が不揃いなことと、 数値が30桁もあるため、セルの数値表示が「1E+29」のように「E+29」で表示 されてしまっており、うまく数値を抽出することが出来ません。 ◆元データ   「列1」     (1) 1234567890  →(本当は30桁:000000000000000000001234567890)    (2) 111111111100000000001111111111   (3) 1      →(本当は30桁:000000000000000000000000000001)  (4) 123456789012345678909999999999  ◆右端から5桁目だけを抽出する   「列1」      (1)  6      (2)  1      (3)  0      (4)  9   お手数お掛けいたしますが、ご指導下さいますよう宜しくお願い致します。

  • Excel 数値を範囲で指定して抽出する方法

    想像してください A列に1,3,4,5,6,7,9,10,11,12, , ,29999。。。 と所々はハヌケの数値が並んでいます。1~30,000までです。 ここで、この数値の範囲を抽出して3列に分割したいのです。 B列には1~10,000までの値 C列には10,001~20,000までの値 D列には20,001~30,000までの値 という具合です。 BCDに入れる関数はどのようなものにすればよいでしょうか。

  • 【エクセル】セル内の文字列から数値のみを抽出する方法

    A1●●●●1111 A2××××××222222 A3■■■■■■■■■■■1234567890 上記のように文字列と数値が一続きになっているデータが各セルに入っています。 文字列+数値の順番は決まっていますが、それぞれの文字数は決まっていません。数値はマイナスの場合もあります。 また、境にカンマやスペースなどもないため、テキストファイルウィザードも使えません。 このデータから、数値のみを抽出する方法がありましたらご教示下さい。 よろしくお願いします。

  • EXCEL セル内の特定の数値のみを抽出したい (関数だけで)

    セル内に数値・文字列を両方含む列があります。 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO 21213 ABC 42321243 KAKIKUKEKO 32480 CBAAA 59343124 SA 85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ここから「数値(2)のみ」を関数で抽出したいのですが、どのようにすればよいのでしょうか? ご教授よろしくお願いいたします!!

  • 値をテーブルに数値型として保持する方法を教えてくだ

    アクセスのテーブルに数値型のフィールドを作って、 小数点以下表示桁数を1にしてるのに、 12.5と入れると12になってしまいます。 12.5という値をテーブルに数値型として保持する方法を教えてください。

  • エクセル 列の数値の表示

    質問します。 列の数値の表示で小数点以下の桁数を混在させる方法を教えてください。 言い方を変えると、キーボードで打った通りの数値を表示させたいのです。 例えば、下記のように打ちたいのです。 2.23 3.1 2.3 4.11 3.46 セルの書式設定→数値→小数点以下の桁数 で桁数を指定すると以下のようになってしまいます。 2.23 3.10 2.30 4.11 3.46 キーボードでの入力の通りに表示させるには、どのようにすればよろしいか? よろしくお願いします。

  • FortranのFormatについて

    Fortranで数値を出力するときのFormatについて質問です。 数値を小数点を無くして、指数表示で出力したいです。 例えば 0.0025 を 25E-4 と出力するのが希望です。 調べたところ、 『■pe■.■e■』(■は数値)というFormatにすれば、  1番目の値は小数点以上の桁数  2番目の値は数値が入る幅  3番目の値は小数点以下の幅  4番目の値は指数の桁数 ということがわかりました。 『2PE8.3e1』だと 0.0025 は 25.00E-4 と出力されます。 『2PE6.1e1』だと 0.0025 は 25.E-4 と出力されます。 しかし、この小数点を消す方法がどうしてもわかりません。 『2pe6.0e1』と設定してもうまく出力されません。 詳しい方がいらっしゃったらぜひ教えてください。 よろしくお願いします。

  • 追加質問:EXCEL セル内の特定の特定の文字のみを抽出したい (関数だけで)

    http://oshiete1.goo.ne.jp/qa4393007.htmlで『特定の数字のみ』の抽出方法を質問させていただいておりますが、作業を進めるうちに特定の文字列をも抽出する必要がでてきました! 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO21213 ABC 42321243 KAKIKUKEKO32480 CBAAA 59343124 SA85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ひとつ補足ですが文字列(1)と数値(2)の間にはスペースがありません。 以上の条件で文字列(1)のみを抽出する方法などはあるのでしょうか? よろしくお願いします!

  • 数値の算出について。

    文字列の数値の合計を算出したいのですが マイナスの値があると、算出出来ません。 例 0000001 0000002 -001 とこういった3つの文字列があった場合 各値をint型に戻して総和を算出しようとしたいの ですが、マイナスの値があると エラーが発生します。 どなたかアドバイスお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう