
やりたいことは日本語文字列の処理で、特定の文字を切り抜きたいのですがうまくいきません。
なぜなら、文字列を切り抜くsubstr関数がバイト単位であるのに対し、文字列を検索するindexがバイト単位でおこなわれていないからです。
例:
文字列"12万3456円"から、円だけを取り除きたいとします。
$str = "12万3456円";
$index = index($str,"円");
$newStr = substr($str, 0, $index);
indexは7を返すが、substrで0から7番目を切り取っても、バイト単位なのでうまくいきません。
文字列の検索をバイト単位で行う方法を教えてください。
おねがいします。
No.2ベストアンサー
- 回答日時:
そもそも何でバージョンをかかない?
Perl5.8.8だと
$str = "12万3456円";
$index = index($str,"円");
$newStr = substr($str, 0, $index);
print $newStr;
だけでもSJISでも期待の動きをする.
#まあ,危ない文字だと動かないだろうから
#各種プラグマの類は書くべきだけど
けど・・そもそも正規表現にしない事情がまるでわからない
最近のPerlだとベースがUTF8だから
日本語がどーのこーのとか二バイトがどーのこーのは
基本的にはない.
すいません。あせって完全に忘れてました。
環境はubuntu8,Perl5.8.8です。
(mysqlはxampp)
実は、いろいろありまして、
あらかじめ$str = "12万3456円";というふうに宣言すればうまくいくのですが、mySQLから文字列のデータをとってきて実行した場合うまくいかない、という状況でして、それで普通にやるのをあきらめてindexとか使ってやろうとしてました。
それでここにこういった質問をしたのですが、
>最近のPerlだとベースがUTF8だから
>日本語がどーのこーのとか二バイトがどーのこーのは
>基本的にはない
とのご指摘をいただいて、もうすこしねばってみるかと思い、今少し奮闘してたのですが、自己解決いたしました。
この質問の回答とは別物ということにはなりますが、
mySQLからとってきた文字列でうまくできない原因は、はっきりとはわかりませんが、その文字列を操作する前に
「
no utf8;
」
をいれるとうまくいきました。
ググってこの原因を詳しく調べたいと思います。
いずれにせよ、手がかりを与えてくださったことに深く感謝いたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Perl perlについての質問 2 2022/10/17 15:25
- Excel(エクセル) INDEX関数とMATCH関数を使用し値を返す数式についてです 2 2022/04/20 13:40
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
splitの逆の処理
-
GDBでデバッグするとき文字列の...
-
VBA like演算子について
-
Perl(Windows)の文法について
-
リフェラーで弾く方法について
-
日本語文字列の指定長(byte)切出し
-
Malformed UTF-8 character
-
パイソンエラーについて
-
ワイルドカード処理
-
リストデータの検索でのエラー...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
マクロを使ってフォルダー内に...
-
CString型からdouble型への変換
-
EXCELからCSVにすると余計なカ...
-
C#で、テキストボックスの入力...
-
Excelについて質問です。 セル...
-
住宅にカナを入力する際に丁目...
-
CSVの定義
-
CString から LPCTSTRの型に変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
cryptの使用方法
-
Malformed UTF-8 character
-
perlでの判定がうまくいきません
-
VBA split(文字列, ★) ★←複数...
-
メールヘッダのMIMEエンコード...
-
perlを使用しての特定行抽出に...
-
Perlで Right関数に近い処理を...
-
GDBでデバッグするとき文字列の...
-
文字列検索(例えばindex関数)...
-
改行コードから改行コードまで...
-
文字列と数字を含むセルから数...
-
日本語文字列の指定長(byte)切出し
-
PERLのSHIFT_JISの振る舞いにつ...
-
Perlの正規表現でマッチする範...
-
splitの逆の処理
-
数値の抽出方法がわからず困っ...
-
ファイルから文字列を読み出し...
-
環境変数のHTTP_REFERERのチェック
-
Perl(Windows)の文法について
おすすめ情報