![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
データの文字数を一定の数字で省こうと思い下記の内容を参考にしようと思っているのですが
下記はUTF-8用なので、SJISに対応させるにはバイト列の定義を変更すれば良いのですが
どのように変更すれば良いのは分かりません。
my #str = "あいうえおかきくけこさしすせそ"; # 元の文字列
my $view = 10; # 10文字まで表示し後は省略
print &main::round_utf8($str,$view);
sub round_utf8 {
my ($str,$view) = @_;
my $one = "[\x00-\x7F]"; # 1バイト文字
my $two = "[\xC2-\xDF][\x80-\xBF]"; # 2バイト文字
my $three = "[\xE0-\xEF][\x80-\xBF]{2}"; # 3バイト文字
my $bigger = "[\xF0-\xF7][\x80-\xBF]{3,}"; # 4バイト以上
$str =~ s/^(($one|$two|$three|$bigger){$view}).+/$1.../g;
return $str;
}
私が考えているのは$****に入っている文字列を10文字以降は..で省略させることです。
アドバイスのほどをどうか宜しくお願いします。
No.2ベストアンサー
- 回答日時:
そもそもやりたいことは「一定の文字数で切る」ことなんでしょう? だとしたら, 「文字」の世界で考えるべきであって, 「バイト列」なんてものを持ち出すのは混乱の本でしかありません.
で今の Perl で一番簡単なのは #1 にあるように
Encode::decode→s///→Encode::encode
とやること. これなら「バイト列」なんて厄介なものを持ち出すことなく「文字」の世界だけで完結します. ちなみに今の Perl なら s/// は
$str =~ s/^.{$view}\K.+/.../;
の方が効率よさそう.
余談ですが, 当然 g は不要ですね>#1.
No.1
- 回答日時:
Shift_JISの文字コード表とかを見れば、1バイト文字、2バイト文字の範囲がわかると思います。
http://charset.7jp.net/sjis.html
あと、最近のならdecode→s/^(.{$view}).+/$1/;→encodeがいいかも。
ところで、
> $str =~ s/^(($one|$two|$three|$bigger){$view}).+/$1.../g;
ここでgいりますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Perl perlについての質問 2 2022/10/17 15:25
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
「1TB」のHDDに日本語は何字入...
-
UTF-8で5~6バイトになる文字コ...
-
バイナリとBCDコード
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
[VBScript][wsh]byte単位でのデ...
-
CHAR_BITについて
-
char str[256]の256の意味は?
-
ビットスワップとバイトスワッ...
-
半角、全角の判別方法
-
UCS-2の一覧表が欲しい
-
機種依存文字をチェックしたい。
-
バイト列とバイナリ列の違いが...
-
pythonでバイナリデータを配列...
-
Excel VBA で Oracle CLOB型カ...
-
エクセルで2byte文字を含むセル...
-
sedコマンドで全ての2バイト文...
-
バイト配列 抜き出す
-
64bit対応
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
「1TB」のHDDに日本語は何字入...
-
バイナリとBCDコード
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
【VB2005】テキストボックス内...
-
Javaで日本語1文字のバイト数
-
1KBが1024byteな理由
-
3バイト文字(UTF-8)をprintfで...
-
C++ Builderで文字列をバイトに...
-
文字コードの利点・欠点について
-
半角、全角の判別方法
-
機種依存文字をチェックしたい。
-
64bit対応
おすすめ情報