テキストデータの処理がうまくいかず困っています。
-----------------------------------------------
a:0.001 b:-11.111 c:50.5 d:-12.345
-----------------------------------------------
といった文字列から
-----------------------------------------------
0.001 -11.111 50.5 -12.345
-----------------------------------------------
といった形で符号や小数点を含めて抽出したいのですが
どのようにするのが良いのでしょうか。
各値は、それぞれの値がスペースによって区切られています。
また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。
split や substr を用いてやろうとしているのですが、
なかなか思ったとおりの形で出力できません…
A 回答 (3件)
- 最新から表示
- 回答順に表示
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.11150.5-12.345
0.001-11.11250.5-12.346
0.001-11.11350.5-12.347
となります。
$elm[0]は数値が入りませんので、使用しないで下さい。
$elm[1]~$elm[4]に目的の数値がはいります。
No.2
- 回答日時:
/([+-]?(?:(?:\d*\.)?\d+))/g;
にマッチさせてみるとか.
または
tr/0-9+.-/ /cs;
で不要な文字をつぶしてから split など.
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抜きでも同様のことが可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 南京錠 2 2023/02/04 11:46
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- JavaScript 助けてください‼︎ javascriptで質問があります。 配列を定義して、 29342、45342 3 2022/06/26 22:06
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Excel(エクセル) excelにて、ある固定値から連番を振りたいが、上限値が異なる連番を振る処理を複数回行いたい場合 6 2022/10/22 11:01
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パイソンエラーについて
-
関数chop
-
プログラミング HSPの変数につ...
-
perlを使用しての特定行抽出に...
-
GDBでデバッグするとき文字列の...
-
リストデータの検索でのエラー...
-
Perl(Windows)の文法について
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
VBA 置換文字がみつからない時
-
マクロを使ってフォルダー内に...
-
VBA EXCEL あるセルの中の一...
-
「何とかで始まり、何とかで終...
-
pythonエラー
-
データにカンマが入ったCSVデー...
-
全角入力
-
英数字のみ全角から半角に変換
-
word差し込み印刷 半角カタカ...
-
[VBA][Excel]クリップボードか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Perlで Right関数に近い処理を...
-
Malformed UTF-8 character
-
Perl(Windows)の文法について
-
日本語文字列の指定長(byte)切出し
-
splitの逆の処理
-
メールヘッダのMIMEエンコード...
-
数字を文字列に変換し短縮化する
-
Perl/Tk使用時のUTF-8コード文...
-
文字列と数字を含むセルから数...
-
GDBでデバッグするとき文字列の...
-
perlを使用しての特定行抽出に...
-
プログラミング HSPの変数につ...
-
perlで文字列を短く(圧縮)し...
-
関数chop
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
住宅にカナを入力する際に丁目...
おすすめ情報