• ベストアンサー

【perl】 split関数のセパレータについて

perlで split関数を使いたいのですがセパレータの定義がうまくいかずに 困っています。 split関数で //\n といった複雑な文字列をセパレータとして認識させるには どうすればよいのでしょうか。 '/' 1文字だけでセパレータとされては意味がなく、 //\n という文字列を ひとまとめでセパレータとして認識させたいと思っています。 みなさま、よろしくお願いします。

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

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

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

別に複雑でもなんでもないと思いますが。 #!/usr/bin/perl # -*- coding: utf8 -* use strict; use warnings; my $str = do {local $/ = undef; <DATA>}; print "### original data###\n"; print $str; my @elems = split qq{//\n}, $str; print "### split!! ###\n"; print $_, "####\n" foreach (@elems); __END__ element 1 hoge fuga/ // element 2 mogemoge xxxx dddd// element 3 Perl Python PHP Ruby ### original data### element 1 hoge fuga/ // element 2 mogemoge xxxx dddd// element 3 Perl Python PHP Ruby ### split!! ### element 1 hoge fuga/ #### element 2 mogemoge xxxx dddd#### element 3 Perl Python PHP Ruby ####

miyakosais
質問者

お礼

ありがとうございました! 見事解決いたしました! 本当にお世話になりました。

関連するQ&A

  • split関数について・・・

    split関数について・・・ split関数を使いたいのですが、 どうかいていいかわかりません Perl言語を使用してます、 どなたか、回答おねがいします 試してみましたが、プログラムが終了して しまいます、ボットで使おうと思ってるのですが

    • ベストアンサー
    • Perl
  • マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?

    素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。 以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。 .NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか? 覚えて無意味はきついので・・・ /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\\純一郎"; } else { str = args[0]; } // strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。 // $names = split /\r\n/ $str; <=※ここです。 array<String^> ^names = { "太郎", "花子", "純一郎" }; String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }

  • VBA split(文字列, ★) ★←複数デリミタ指定することできますか?

    VBAのsplit()関数ですが、 デリミタは1つしか指定できないのでしょうか? 例えば、 ------------------ 2005-5/23 19'02"40 ------------------ のような文字列を Perlの様に簡単に分割することは無理でしょうか? Array = split(文字列, /[ :\/\'\"-]/)

  • セパレータ文字の意味を教えてください。

    文章を読んでいて、『セパレータ文字』という言葉が出てきます。 例文: 文字列からトークンを切り出す。"" で囲まれた文字列内では、セパレータ文字は、単なる文字として扱う。 この『文字列』はファイルのパスみたいなものと考えて頂てください。このときセパレータ文字とは、『/と\』の事なのでしょうか?又別の意味や、足りない意味などございませんでしょうか?宜しくお願いします。あと、申し訳ないのですが、よろしければトークンの意味もお教えくだされば、助かります。

  • Excel97 VBA とVBSのsplit関数

    新しい職場で、Excel VBAでデータを取り込み、それを改行文字ごとにsplit関数で区切って配列に入れようとしました。 arr=split(文字列,vbcrlf) って感じでですね。しかし、なんとその職場のExcelのバージョンが97のため、VBAでsplit関数が使えず、この意図が実現できませんでした。そのため、ネットで調べてVBScriptのsplit関数を流用しようとしたのですが、「終了していない文字列型の定数です。」とエラーが出てしまいます。ソースは次のとおりなのですが、どう直せばいいでしょうか。改行文字で区切るのでなく、カンマなどで区切るのなら、上手く出来るのですが・・・。 Sub sample() Dim vs As Object Dim rtn As Variant Dim q As String Dim buf As String q = Chr$(34) 'ダブルクォーテーション Set vs = CreateObject("ScriptControl") vs.Language = "VBScript" 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 buf = "1" & vbCrLf & "2" & vbCrLf & "3" '改行で区切った文字。実際は、もっと複雑な文字を取り込みます。 rtn = vs.Eval("split(" & q & buf & q & ", vbCrLf)") 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 Debug.Print rtn(1) 'ここで「終了していない文字列型の定数です。」エラーが出る End Sub

  • Split関数で文字を文割するのはわかるのですが、

    Split関数で文字を文割するのはわかるのですが、 文字を残して一文字一文字表示ってできるのでしょうか 説明が下手ですいません Perl言語を使っています Botで使いたいと思ってます

    • ベストアンサー
    • Perl
  • Perlの文字列処理関数?

    Perl5.8も視野にいれた、便利な文字列関数を探しています。 trim rtrim ltrimを行う関数ですが、こういうものは自作するべきでしょうか? VBやPHPには標準であるようですが、Perlは文字コードを備えた一般的なものは 存在するのでしょうか?

    • ベストアンサー
    • Perl
  • 文字列をsplitするSQL文を教えて下さい

    SQLServer2000上で指定した文字で文字列をsplitような関数があれば教えて頂けますか? 例えば"12345.6789"という文字列を"."(ピリオド)を指定して、"12345"と"6789"という2つの文字列を取得したいと思っています。 Transact-SQLの関数リファレンスを見てみたのですが、適当なものが見つかりませんでした。 自作するしかないのでしょうか・・

  • Perlにおけるレコードセパレータについて

    Perl初心者、現在独学中です。 複数プラットフォームで作られたテキストベースのデータファイル群を ファイルハンドルから開き readline で読み込む際、3つの改行文字の 全てに入力レコードセパレータ(特殊変数$/)を対応させたいのですが、 どのようにすれば良いのでしょうか。 ファイルサイズが大きいもので500~600MB程ありますので undef $/; で 全て読み込むのは余り現実的ではなく1行ずつ評価したいのです。 無理なようでしたら、代替案(ファイルの先頭64KBだけを読み込む等)を ご教示頂きたいと思います。

    • ベストアンサー
    • Perl
  • split で " または ' で挟まれた部分を一つとして処理するには?

    perl で 文字列を split で処理する時に、" や ' で挟まれた領域を一つの文字列として処理するにはどうやったらよいのでしょうか? たとえば $aaa = "aaa bbb 'c d e' fff"; @aaa = split(/ /, $aaa); だと、 aaa bbb 'c d e' fff となってしまいますが、 aaa bbb 'c d e' fff となるようにするにはどうするのでしょうか?

    • ベストアンサー
    • Perl