• ベストアンサー

Perlのテキストの変換について

初めて質問します。 Perlを使って下記のようにテキストを変換したいんですけど、やり方を教えてください>< 【変換前】 A 1234 A 2345 B 3456 B 4567 【変換後】 >Af >1234 >As >2345 >Bf >3456 >Bs >4567 というふうに並び変えたいんですけど、なにぶんプログラミング初心者なもので、 よろしくお願いいたします。

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

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

>#2 なるほど、出力は同じでも意味合いが全然違ったんですね・・・ 添削有難うございます! 訂正版: http://ideone.com/fPiHR

reddot
質問者

お礼

回答してくださってありがとうございます。 無事に解決することができました。 他の方にも回答していただいていろいろと勉強になりました。

その他の回答 (4)

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

#2 をベースに one-liner化: perl -pe 's/^(.)\s*/">$1" . [qw(s f)]->[$. % 2] . "\n>"/e'

回答No.4

あんまり、かわらんか。空白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)
回答No.2

試してませんが, Perl の方で print は print ">$mark$suffixes[$. % 2]\n>$number"; とすべきではないかと>#1. 配列 @suffixes の特定の 1要素であるスカラを参照しているので, sigil は @ ではなく $ でしょう. 本題は要件がわからん (「どう変換するのか」がわからん) ので無視.

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

いろいろ解法ありそうですけど、自分がまっさきに思い浮かんだのは次のやり方です。 ・一行ずつ処理 ・行番号の偶奇判定によって、fかsか振り分ける <おまけ> 取り敢えず動いたレベルですが・・・ Perlは見よう見まねなので、自分も添削が欲しいです。 http://ideone.com/ItAlw http://ideone.com/pogvK