
データの文字数を一定の数字で省こうと思い下記の内容を参考にしようと思っているのですが
下記は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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
バイト列とバイナリ列の違いが...
-
char str[256]の256の意味は?
-
ピクセル,dpiから容量(バイト...
-
COBOLのCOMP形式について
-
:(コロン)のKeyCode
-
エクセルシート名の制限を変更...
-
Javaで日本語1文字のバイト数
-
C++ Builderで文字列をバイトに...
-
「1TB」のHDDに日本語は何字入...
-
64bit対応
-
ビットスワップとバイトスワッ...
-
VBSでテキストファイルの文字列...
-
PICマイコンで変数値の保持
-
DLL呼出し元の使用コード判定法...
-
pythonでバイナリデータを配列...
-
16bitアクセスRAMとは
-
memcmp バイナリデータの比較方法
-
3バイト文字(UTF-8)をprintfで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
機種依存文字をチェックしたい。
-
C++ Builderで文字列をバイトに...
-
【VB2005】テキストボックス内...
-
バイト列とバイナリ列の違いが...
-
64bit対応
-
VBAでShift-JISのURLエンコード
-
Javaで日本語1文字のバイト数
-
VB.NET LeftBの代用
-
SQLで1バイト、2バイト混在...
-
URLは最高何文字まで可能なので...
-
:(コロン)のKeyCode
-
memcmp バイナリデータの比較方法
おすすめ情報