• ベストアンサー

全角空白での文字列分割について

教えてください。 以下のような文字列で、全角空白をキーに2つに分割したいと考えています。 テストテキスト テストテストテスト スクリプトの文字コードはshiftJISで、分割対象の文字列もshiftJISです。 use encoding "shiftjis";  としてます。 ($t1,$t2) = split(/ /, $t); として試してみましたが、やはり無理でした。 何か良い方法がありましたら、教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#1>open ( IN, '<:encoding(shiftjis)', "target_text.txt") ; を使ってやってもOKでした。 逆に、'<:encoding(shiftjis)' を省略すると、仰るような結果になるので、 use encoding "shiftjis"; が、うまく機能していないのかなと思います。 use encoding "Shift_jis"; use encoding "cp932"; use encoding "UTF-8"; などを試してみたらどうなりますか? どうも、スクリプトの実際の文字コードがシフトJISではないのではないかと思います。例えばUTF-8とか (読み込むファイルの方は仰るように変換時に指定コードと違う場合はエラーメッセージがでますので、でないということは、シフトJISで間違いないと思います)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

Perlのバージョンはどうなっていますか? 5.8.0でShiftJISの文字がうまく処理されないというバグがありました。 もしバージョンが5.8.0なら、バージョンアップをしましょう。

mhiro_december
質問者

補足

バージョンは5.8.7です。 すみません。これも書き忘れてました。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ウチでも試してみましたが、 うまく分割できましたよ。 全角空白が複数あるとかそういうことでしょうか?

mhiro_december
質問者

補足

回答ありがとうございます。 全角空白の数は1つです。連続して2つ以上出現しない仕様になっています。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, 手元 (perl 5.8.8) だと #!/usr/local/bin/perl use encoding 'shiftjis'; $t = "aaa bbb"; ($t1, $t2) = split(/ /, $t); print "$t1 $t2\n"; できちんと動いてるんですけど.... 「無理」ってのは, どういうことをさしているんでしょうか? あと, 「正しいデータが入力されているのか」も要チェックかな.

mhiro_december
質問者

補足

回答ありがとうございます。 すみません。重要な点を書き忘れていました。 分割対象のテキストは外部からインターネット経由で取ってくるテキストです。 GETしたのち、 open ( IN, '<:encoding(shiftjis)', "target_text.txt") ; としてエンコーディングしています。取ってくる元のファイル(ここではtarget_text.txt)はshiftJISです。 実はこの部分も自信がありません。 スクリプト本文もshiftJISなので、この記述は不要では?と最初思ったのですが、動かしてみると文字化けを起こすのでやむなく入れています。 この記述で一応ちゃんと動いているようですが、、、 「無理」と書いたのは、空白全角が無視されてしまうということです。 $t = "サンプルテキスト テストテスト"; ($t1,$t2) = split(/ /,$t); だとすると、$t1に"サンプルテキスト テストテスト"と代入され、$t2は空になります。 '<:encoding(shiftjis)', で正しいかどうかは自信がありませんが、化けずに表示されるので、「正しい」データだと思いますが、、、、 引き続き、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP 空白文字で分割したい

    $text = "日本 中国 オランダ" を 日本, 中国, オランダのように分割するために、 以下のコードを書きました。 preg_split("/[\s]+/", $text); しかし、全角スペースの時も分割したいので、正規表現を/[ \s]+/とすると、preg_splitの返す配列に期待したものが、入りません。なぜか空文字("")が含まれます。 どうすれば、全角スペースに対応できるでしょうか?

    • ベストアンサー
    • PHP
  • 全角半角考慮した文字列分割

    A列           B列         C列 あいうえおかきくけこ  あいうえ      おかきくけこ アイウエオカキクケコ   アイウエオカキクケ  コ あいうえオかきくけこ   あいうえオ    かきくけこ A列に全角半角混在のテキスト項目があります。 B列、C列に以下のルールで分割したいのですが、Excel関数で 実現可能でしょうか?可能な場合は式をご教授して 頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように 全角半角を考慮して分割したいと考えております。 B列  A列9桁目が半角の場合は半角9文字 A列9桁目全角の場合は半角8文字(全角4文字)をB列へ C列  A列10桁目が半角の場合は、左端10桁目~半角9文字 A列10桁目が全角の場合は、左端9桁目~半角9文字

  • C# 文字列を改行コードで分割

    C# 文字列を改行コードで分割 テキストボックスに記載された文字列を1行ごとに取り出そうと思い string[] strs = textBox1.Text.Split('\n'); とコーディングしたら、末尾に\rがついてしまいました。 末尾の\rを削除するコードを追加して書けばよいのですが、改行コード\r\nで分割する方法ありましたらお教えください。

  • splitしない文字列について

    split("\t",$moji) で$mojiを分割しているのですが、タブ区切りなのに分割しない文字列があります。 企業秘密な所もあり、問題の文字列そのままを報告できないのですが、分割をキャンセルするような文字コードってあるのでしょうか? その文字コードであやしい物は 「 」:スペース 「!」、「♪」 などが含まれています。 通常であれば10個に分割される文字列がまったく分割されなく分割数は1と出ます。もちろんタブ区切りになっています。 1つの文字列だけの事なのです。原因はまったく不明。よろしくお願いします。

    • ベストアンサー
    • PHP
  • ""で囲まれていない箇所にある空白で分割

    PHPのカテゴリにて、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2334460 で同様の質問をした者なのですが、解決策を得られなかったので再度(こちらのPerlカテゴリにて)質問させて下さい。 (1)題名の通り、""に囲まれていない箇所にある空白によって文字列を分割したいのですが、split()等を使って一発で分割する正規表現はあるでしょうか。 (2)もし(1)が無理であれば、どういった手法が有効でしょうか。 ちなみに今のところ以下の方法で行っています。  1."" 中の空白をいったん別の文字に変換  2.split(/\s/) で分割  3.分割した各要素について1で変換した空白を復元

    • ベストアンサー
    • Perl
  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 文字列を二文字以上の文字列で分割したい。

    文字列を二文字以上の文字列で分割したい。 perlやrubyなどではsplitを使えば任意の文字列で文字列を分割して配列に突っ込むことができたと思います。 c++でこういったことをやりたくて書いたりサイトを参考にしたりしていたのですが、 http://goodjob.boy.jp/chirashinoura/id/100.html http://networkprogramming.blog18.fc2.com/blog-entry-89.html のようにstrtokを使うと、たとえば..ドット二個が含まれるところで分割したいのにもかかわらずdelimに..を指定するとドットが一つのところでも分割されてしまいます。 文字列"cut"が含まれるところで切断したい場合でもc,u,tそれぞれが含まれる場所で切断されてしまします。 このような問題を解決するにはどのようにするのがいいのでしょうか? MFCで書いてるのでそれに含まれるライブラリなどが使える場合それを用いることができます。

  • 文字列前後の「全角空白/半角空白/改行文字」を取り除く

    PHPで、「文字列の前後に付加されている全角空白/半角空白/改行文字を取り除く」 という処理をしたいのですが、以下のように置換処理を書くとうまくいきません。 $after = preg_replace('/^[  \r\n]*(.*)[  \r\n]*$/u', '$1', $before); // [  \r\n]→[半角空白、全角空白、改行文字]です どううまくいかないのかといいますと、入力として半角スペース+全角文字が入ったときに、全角文字の先頭文字が文字化けしてしまいます。 たとえば、 <半角スペース>あああ をこれにかけると、 <よくわからない文字>ああ となります。 以下のように2回に分けてみると、正常に動きます。 $tmp = preg_replace('/[  \r\n]*$/u', '', $before); $after = preg_replace('/^[  \r\n]*/u', '', $tmp); 最初のように1回の正規表現による置換で済ませたい場合、 どのように書くのが適切なのでしょうか? PHPのバージョンは5.2.3です。

    • ベストアンサー
    • PHP
  • 文字列に空白を入れたい

    たくさんのデータがあるのですが、名前の列があるとして、 その名前はすべて、苗字が二文字の人のみの時に、苗字の名前の間に空白を入れたいのですが(ようするに、二文字目と三文字目の間に全角空白を入れたい。)、どのようなやりかたがあるでしょうか。 すぐに教えてくれると助かります。

  • 文字列の' '(全角空白)の開始位置を返す関数

    SQLServer2000で、文字列の' '(全角空白)の開始位置を返す関数を教えて下さい。 CHARINDEX かな?と思い試してみましたが、違ってたみたいで・・・。 よろしくお願い致します。