• ベストアンサー

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

教えてください。 以下のような文字列で、全角空白をキーに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