- ベストアンサー
Perlのテキストの変換について
初めて質問します。 Perlを使って下記のようにテキストを変換したいんですけど、やり方を教えてください>< 【変換前】 A 1234 A 2345 B 3456 B 4567 【変換後】 >Af >1234 >As >2345 >Bf >3456 >Bs >4567 というふうに並び変えたいんですけど、なにぶんプログラミング初心者なもので、 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>#2 なるほど、出力は同じでも意味合いが全然違ったんですね・・・ 添削有難うございます! 訂正版: http://ideone.com/fPiHR
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
#2 をベースに one-liner化: perl -pe 's/^(.)\s*/">$1" . [qw(s f)]->[$. % 2] . "\n>"/e'
- _--_1l1_1_
- ベストアンサー率67% (102/152)
あんまり、かわらんか。空白2文字を全角空白にしていることに注意。 use strict; use warnings; my %work = (); while ( my $line = <DATA> ) { $line =~ s/\x0D?\x0A?$//; if ( $line =~ m/([^\s]+)\s+(.+)/ ) { my ( $key, $val ) = ( $1, $2 ); if ( !exists $work{$key} ) { # first match print '>', $key, "f\n>", $val, "\n"; $work{$key} = 1; } else { # second match print '>', $key, "s\n>", $val, "\n"; delete $work{$key}; } } } __DATA__ A 1234 A 2345 B 3456 B 4567
- Tacosan
- ベストアンサー率23% (3656/15482)
試してませんが, Perl の方で print は print ">$mark$suffixes[$. % 2]\n>$number"; とすべきではないかと>#1. 配列 @suffixes の特定の 1要素であるスカラを参照しているので, sigil は @ ではなく $ でしょう. 本題は要件がわからん (「どう変換するのか」がわからん) ので無視.
- sholmes
- ベストアンサー率81% (89/109)
いろいろ解法ありそうですけど、自分がまっさきに思い浮かんだのは次のやり方です。 ・一行ずつ処理 ・行番号の偶奇判定によって、fかsか振り分ける <おまけ> 取り敢えず動いたレベルですが・・・ Perlは見よう見まねなので、自分も添削が欲しいです。 http://ideone.com/ItAlw http://ideone.com/pogvK
お礼
回答してくださってありがとうございます。 無事に解決することができました。 他の方にも回答していただいていろいろと勉強になりました。