電子書籍の厳選無料作品が豊富!

教えてください。
以下のような文字列で、全角空白をキーに2つに分割したいと考えています。

テストテキスト テストテストテスト

スクリプトの文字コードはshiftJISで、分割対象の文字列もshiftJISです。
use encoding "shiftjis";  としてます。

($t1,$t2) = split(/ /, $t);

として試してみましたが、やはり無理でした。

何か良い方法がありましたら、教えてください。
よろしくお願いします。

A 回答 (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で間違いないと思います)
    • good
    • 0

Perlのバージョンはどうなっていますか?


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

この回答への補足

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

補足日時:2006/09/12 10:55
    • good
    • 0

ウチでも試してみましたが、


うまく分割できましたよ。
全角空白が複数あるとかそういうことでしょうか?

この回答への補足

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

補足日時:2006/09/12 09:42
    • good
    • 0

ん~, 手元 (perl 5.8.8) だと


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

この回答への補足

回答ありがとうございます。
すみません。重要な点を書き忘れていました。

分割対象のテキストは外部からインターネット経由で取ってくるテキストです。

GETしたのち、
open ( IN, '<:encoding(shiftjis)', "target_text.txt") ;

としてエンコーディングしています。取ってくる元のファイル(ここではtarget_text.txt)はshiftJISです。

実はこの部分も自信がありません。
スクリプト本文もshiftJISなので、この記述は不要では?と最初思ったのですが、動かしてみると文字化けを起こすのでやむなく入れています。
この記述で一応ちゃんと動いているようですが、、、

「無理」と書いたのは、空白全角が無視されてしまうということです。
$t = "サンプルテキスト テストテスト";
($t1,$t2) = split(/ /,$t);
だとすると、$t1に"サンプルテキスト テストテスト"と代入され、$t2は空になります。

'<:encoding(shiftjis)', で正しいかどうかは自信がありませんが、化けずに表示されるので、「正しい」データだと思いますが、、、、

引き続き、よろしくお願いします。

補足日時:2006/09/12 09:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!