• ベストアンサー

テキスト置換

Perlでスクリプトの変換をしたいのですが、どうにも改行(いろいろ)などが分かりません。 サンプルスクリプトのご教授を、どうぞ、お願いいたします。 具体的には (1) ^music,rei_bgm0001を mp3loop "bgm\rei_0001.mp3"に (bgm0001は~0067まであるので一括変換したいです.) (2) ^chara,ううう,えええ,いいいa,long,center,あああ を ld c,":a;mp\ううう_えええ_いいいa.あああ.jpg",long,center, に置換したいです. 【^chara,ううう,えええ,いいいa,long,center,あああ、なのですがlong,center,を上のように置換後、最後に持っていきたいです.】 (3) //の入った行だけを全て削除する。です。 解りにくいかと思いますが宜しくお願いします.

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

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

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

結局丸投げじゃん。 use strict; use warnings; my @charas; while (my $line = <DATA>) { chomp $line; next if $line =~ m{^//}; if ($line =~ /^\^chara/) { push @charas, $line; next; } if ($line =~ /^\^music/) { my @f = split q{,}, $line; my @name = $f[1] =~m/([a-z]+) _ ([a-z]+) (\d+)/x; printf qq{mp3loop "%s\\%s_%04d.mp3"\n}, $name[1], $name[0], $name[2]; } } foreach my $chara (@charas) { my @f = split q{,}, $chara; printf qq{ld c,":a;mp\\%s_%s_%s.%s.jpg",%s,%s\n}, $f[1], $f[2], $f[3], $f[6], $f[4], $f[5] ; } __END__ ^music,rei_bgm0001 ^music,rei_bgm0002 ^music,rei_bgm0003 ^music,rei_bgm0004 ^music,rei_bgm0005 ^music,rei_bgm0006 ^music,rei_bgm0007 ^music,rei_bgm0008 ^music,rei_bgm0009 ^music,rei_bgm0010 ^music,rei_bgm0011 ^music,rei_bgm0012 ^music,rei_bgm0013 ^music,rei_bgm0014 ^music,rei_bgm0015 ^music,rei_bgm0016 ^music,rei_bgm0017 ^music,rei_bgm0018 ^music,rei_bgm0019 ^music,rei_bgm0020 ^music,rei_bgm0021 ^music,rei_bgm0022 ^music,rei_bgm0023 ^music,rei_bgm0024 ^music,rei_bgm0025 ^music,rei_bgm0026 ^music,rei_bgm0027 ^music,rei_bgm0028 ^music,rei_bgm0029 //30 ^music,rei_bgm0030 ^chara,ううう,えええ,いいいa,long,center,あああ ^music,rei_bgm0031 ^music,rei_bgm0032 ^music,rei_bgm0033 ^music,rei_bgm0034 ^music,rei_bgm0035 ^music,rei_bgm0036 ^music,rei_bgm0037 ^music,rei_bgm0038 ^music,rei_bgm0039 ^music,rei_bgm0040 ^music,rei_bgm0041 ^music,rei_bgm0042 ^music,rei_bgm0043 ^music,rei_bgm0044 ^music,rei_bgm0045 ^music,rei_bgm0046 ^music,rei_bgm0047 ^chara,くくく,けけけ,ききき,long,center,かかか ^music,rei_bgm0048 ^music,rei_bgm0049 ^music,rei_bgm0050 ^music,rei_bgm0051 ^music,rei_bgm0052 ^music,rei_bgm0053 ^music,rei_bgm0054 ^music,rei_bgm0055 ^music,rei_bgm0056 ^music,rei_bgm0057 ^music,rei_bgm0058 ^music,rei_bgm0059 //60 ^music,rei_bgm0060 ^music,rei_bgm0061 ^music,rei_bgm0062 ^music,rei_bgm0063 ^music,rei_bgm0064 ^music,rei_bgm0065 ^music,rei_bgm0066 ^music,rei_bgm0067 結果: mp3loop "bgm\rei_0001.mp3" mp3loop "bgm\rei_0002.mp3" mp3loop "bgm\rei_0003.mp3" mp3loop "bgm\rei_0004.mp3" mp3loop "bgm\rei_0005.mp3" mp3loop "bgm\rei_0006.mp3" mp3loop "bgm\rei_0007.mp3" mp3loop "bgm\rei_0008.mp3" mp3loop "bgm\rei_0009.mp3" mp3loop "bgm\rei_0010.mp3" mp3loop "bgm\rei_0011.mp3" mp3loop "bgm\rei_0012.mp3" mp3loop "bgm\rei_0013.mp3" mp3loop "bgm\rei_0014.mp3" mp3loop "bgm\rei_0015.mp3" mp3loop "bgm\rei_0016.mp3" mp3loop "bgm\rei_0017.mp3" mp3loop "bgm\rei_0018.mp3" mp3loop "bgm\rei_0019.mp3" mp3loop "bgm\rei_0020.mp3" mp3loop "bgm\rei_0021.mp3" mp3loop "bgm\rei_0022.mp3" mp3loop "bgm\rei_0023.mp3" mp3loop "bgm\rei_0024.mp3" mp3loop "bgm\rei_0025.mp3" mp3loop "bgm\rei_0026.mp3" mp3loop "bgm\rei_0027.mp3" mp3loop "bgm\rei_0028.mp3" mp3loop "bgm\rei_0029.mp3" mp3loop "bgm\rei_0030.mp3" mp3loop "bgm\rei_0031.mp3" mp3loop "bgm\rei_0032.mp3" mp3loop "bgm\rei_0033.mp3" mp3loop "bgm\rei_0034.mp3" mp3loop "bgm\rei_0035.mp3" mp3loop "bgm\rei_0036.mp3" mp3loop "bgm\rei_0037.mp3" mp3loop "bgm\rei_0038.mp3" mp3loop "bgm\rei_0039.mp3" mp3loop "bgm\rei_0040.mp3" mp3loop "bgm\rei_0041.mp3" mp3loop "bgm\rei_0042.mp3" mp3loop "bgm\rei_0043.mp3" mp3loop "bgm\rei_0044.mp3" mp3loop "bgm\rei_0045.mp3" mp3loop "bgm\rei_0046.mp3" mp3loop "bgm\rei_0047.mp3" mp3loop "bgm\rei_0048.mp3" mp3loop "bgm\rei_0049.mp3" mp3loop "bgm\rei_0050.mp3" mp3loop "bgm\rei_0051.mp3" mp3loop "bgm\rei_0052.mp3" mp3loop "bgm\rei_0053.mp3" mp3loop "bgm\rei_0054.mp3" mp3loop "bgm\rei_0055.mp3" mp3loop "bgm\rei_0056.mp3" mp3loop "bgm\rei_0057.mp3" mp3loop "bgm\rei_0058.mp3" mp3loop "bgm\rei_0059.mp3" mp3loop "bgm\rei_0060.mp3" mp3loop "bgm\rei_0061.mp3" mp3loop "bgm\rei_0062.mp3" mp3loop "bgm\rei_0063.mp3" mp3loop "bgm\rei_0064.mp3" mp3loop "bgm\rei_0065.mp3" mp3loop "bgm\rei_0066.mp3" mp3loop "bgm\rei_0067.mp3" ld c,":a;mp\ううう_えええ_いいいa.あああ.jpg",long,center ld c,":a;mp\くくく_けけけ_ききき.かかか.jpg",long,center

その他の回答 (1)

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

えぇと, 「改行」って全く関係ないのでは? とりあえず不明な点をいくつか: ・「^music,rei_bgm0001」とか「^chara,ううう,えええ,いいいa,long,center,あああ」は, 先頭の「^」も入っているのですか? ・これらのフォーマットは固定なのでしょうか? つまり, 「^music,」とか「^chara,」あたりは一定なのでしょうか? また, (2) の方では「long center」も固定なのでしょうか? 1行のカンマの数も, それぞれここに上がっている通りでしょうか? ・「// の入った行」というのは, 「行のどこかにスラッシュが 2個続けて現れる」という解釈でいいですか? それとも, 行の先頭の場合だけを考えますか? ・ここに上がっていない形の行はどうすればいいですか?

hanahana_2
質問者

補足

1^music,rei_bgm0001などは(^)も含んでいます。 2「^music,」とか「^chara,」は固定です. 3すいません「// の入った行」は//が先頭にはいった行です。 補足、すいません.これは ld c,":a;mp\ううう_えええ_いいいa_あああ.jpg",long,center, ld c,":a;mp\ううう_えええ_long_いいいa.あああ.jpg",center, で ^chara,ううう,えええ,いいいa,long,center,あああ は【,】で区切られている物の中の(^chara)を消し ld c,":a;mp\ううう_えええ_long_いいいa_あああ.jpgのカタチに置き換えると言う事です。 もう私ではお手上げでした。

関連するQ&A

  • Perl で 置換

    Perlでスクリプトの変換をしたいのですが、どうにも改行(いろいろ)などが分かりません。 サンプルスクリプトのご教授を、どうぞ、お願いいたします。 具体的には (1) ^music,rei_bgm0001を mp3loop "bgm\rei_0001.mp3"に (bgm0001は~0067まであるので一括変換したいです.) (2) ^chara,ううう,えええ,いいいa,long,center,あああ を ld c,":a;mp\ううう_えええ_いいいa.あああ.jpg",long,center, に置換したいです. 【^chara,ううう,えええ,いいいa,long,center,あああ、なのですがlong,center,を上のように置換後、最後に持っていきたいです.】 (3) //の入った行だけを全て削除する。です。 解りにくいかと思いますが宜しくお願いします.

  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • VBSにて改行コードの検出・置換

    VBSに馴染みがなく何方か教えて頂ければ… ------------------------ 11111AAA[0D0A]AAA[0A] 22222CCCCCC[0A] 上記データ、[0D0A]の改行コードを捜しだし、""に置換 111111AAAAAA 左記レコードの様にしたい。 -------------------------- Do Until objin.AtEndOfStream strLine = objin.Readline If InStr(strLine,VbCrLf) <> 0 Then strLineA = Replace(strLine,vbCrLf,"") objout.Write(strLineA) Else objout.Write(strLineA & VbLf) End If Loop ※InStr関数で改行コードが見つからない。 (objin.Readlineで改行まで読み込んでない)  Replace関数のみ行うと置換されるが[0A]まで ""となってしまう。  [0D0A]のみ検知し置換したいのですが。 何方か良い方法を知っている方、よろしく御願い致します。

  • フォルダ内のファイルを全て開き文字列置換

    こんばんは。Perl超初心者です(プログラミングの初心者でもあります)。 フォルダ内にあるすべてのファイルに対して、正規表現を使った文字列置換をしたいのですが、うまくいきません。アドヴァイスをいただけないでしょうか。 具体的には、あるファルダの中に100個程のファイルがあって、その中の改行が3回連続している部分を、「改行+[SAMPLE]+改行」に置換をしたいと表います。 Windows XP Professional SP3 / ActivePerl 5.10 の環境で、以下のように記述したのですが、「Missing $ on loop variable at insert.pl line 5.」とエラーになってしまいます。どこで、間違ったのでしょうか(というか、まるでダメなスクリプトかもしれませんが…)。 use strict; use warnings; my @filename = glob "*.txt"; foreach open(FILE, "$filename(@filename)") { my @content =<FILE>; @content =~ s/\n{3}/\n[SAMPLE]\n/g; print FILE @content; close(FILE); } どなたか、ご教示いただけると非常助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 入力したテキストを置換するプログラミングを作りたいのですが上手くいかず

    入力したテキストを置換するプログラミングを作りたいのですが上手くいかず困っています。 テキストエリアに文章を入力し、 次に置換前の文字と置換後の文字をそれぞれ入力する形にして置換をしようと考えています。 最終的に置換前の文字と置換後の文字を入力する欄を複数用意して 複数の置換を一度で行ないたいと思っています。 ですが下記の「a1」に入力した置換前の文字全て削除され「a2」の内容に変換されません。 初心者なので根本的に間違ってるかもしれませんが、わかる方よければ教えてください。 ----------------- <form method="post" action="form.cgi"> <textarea name="chikan" rows="10" cols="70"></textarea><br> <input type="text" name="a1" size="50">を<input type="text" name="a2" size="50">に変換<br><br> </p> <p><input type="submit" value="置換"></p> </form> ----------------- ----------------- #!/usr/local/bin/perl if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); } else { $alldata = $ENV{'QUERY_STRING'}; } foreach $data (split(/&/, $alldata)) { ($key, $value) = split(/=/, $data); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg; $value =~ s/\t//g; $value =~ s/\n//; $in{"$key"} = $value; $in{'chikan'} =~ s/\Q$in{'a1'}\E/$in{'a2'}/g; } print"Content-type: text/html\n\n"; print <<"EOM"; <html> <head><title></title> </head> <body> <textarea name=area rows=50 cols=70> $in{'chikan'} </textarea> </form> </body> </html> EOM exit; -------------------------

    • ベストアンサー
    • CGI
  • VBScriptを用いた改行コードを含む置換方法について

    お世話になります。 VBScript初心者です。 下記の通り、VBスクリプトを用いてファイルの文末の「カンマカンマ改行」を 「改行」に置換したいと思っていますが、上手くできません。 VBScriptで正規表現を用い、改行コードを含んだ置換方法を教えていただきたく思います。 【置換前】 AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○,, 【変更後】 AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○ 現在のスクリプトは、 myStr1 = "AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○,," '(1)RegExp オブジェクトを作成する Set objRE = New RegExp '(2)検索パターンを設定     objRE.Pattern = ",+\n"       '(3)大文字/小文字を区別しない objRE.IgnoreCase = True   '(4)全体を検索     objRE.Global = True     '(5)置換を実行 myStr2 = objRE.Replace(myStr1,"\n") '(6)一行書込み objFile.WriteLine(myStr2)      となっています。(部分的に抜粋しましたが各変数の定義はできています) (2)の検索パターンに",+\n"、(5)の置換を実行に"\n"を定義しましたが置換できませんでした。 他のパターンとして (2)の列に",+\x0A"、(5)の列に"\x0A" (2)の列に",+\x0d"、(5)の列に"\x0d" も行ってみましたが置換できませんでした。 なお、置換対象のファイルはtxtファイルまたはCSVファイルを考えています。 どなたかご教示いただきたく、よろしくお願い致します。

  • Perlのファイル操作の置換について

    Perlを利用し、ファイル内の置換操作を行いたいと思います。Perlに関して全く無知なので誰か教えてください。 変換したい内容を下に記載します。 (1)html:button value="aaa" name="bbb" c:button property="${aaa.bbb}"                      ↓↓  (2)html:button value="aaa" name="bbb" c:button property="${aaa.bbb}" 上記の変換ではvalueとnameがpropertyになる (3)html:button value="xxx" var="yyy"        ↓↓ (4)c:button prop="xxx" id="yyy" (3)に関してはvalueとvarの間に何か他の処理が入ってもvalueとvarだけを特定し、変換できるScript文にしたいです。 言葉足らずだったらすみません。誰か教えて下さい。

    • ベストアンサー
    • Perl
  • Perl:ドイツ語のウムラウト文字の置換ができなくて困っています

    Perl初心者です。ドイツ語のウムラウト文字の置換ができなくて困っています。 環境はWindowsXP + ActivePerl v.5.8.7 です。 以下のスクリプトを実行しています。 === use strict; use warnings; use encoding 'utf8'; my $txt = "*"; print "Pre: $txt\n"; $txt =~ s/*/a/; #置換 print "After: $txt\n"; === *にアルファベットや日本語を入れたときは、"a"に置換されるのですが、 ドイツ語の"アーウムラウト"を入れると置換されません。 文字コードを調べたりしたのですが、解決策が見つからずにこまっています。 きっと、基本的なことがわかっていないのだと思います。 お助けください。

    • ベストアンサー
    • Perl
  • 複数行に渡る文字列の置換

    Perlで書かれたソースを以下のように書き換えたいと考えています。 【変換前】 my $message = Convert( From => 'Shift_JIS', To => 'utf-8', Text => "(UTF-8の文字列)", ); 【変換後】 my $message = Convert( "(UTF-8の文字列)" ); ソース・ファイルは非常にたくさんあるのでスクリプトを組んで一括で行いたいと考えています。 容易く書き換えを完了できる方法はないでしょうか? ■前提条件 - 別の場所に出力するようにする場合はディレクトリ階層も維持する。 - インデントされている場合はインデントを保持する。 perl -pi -e 's///'で置換することが最も簡単そうですが、今回は複数行に渡るため、 s///の部分が非常に複雑になりそうです。なので、s///の部分をスクリプト・ファイルかなにかに 置き換えて、下記のように実行できればと考えているのですが、(何かしらのオプション)の部分が よくわかりません。。 perl -i (何かしらのオプション) (ファイル名) (ソースファイル名)... もちろんもっと良い方法があれば、その方法が良いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう