文字列を一文字ずつ分割する(全角半角混合) - Perl

この記事は2007年03月05日に書かれた物です

文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。 「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。

jfoldは指定文字数分取り出してくれる機能を持つ。ここで"1"を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。

サンプル

;#
;#文字列を1文字ずつ分割する (全角・半角混合)
;#
 
use Jcode;
 
#-- 分割 --#
@char = str_jfold('Hello!は日本語でコンニチワです', 1);
 
 
#-- 表示 --#
foreach my $c (@char){
	print "$c\n";
}
 
 
#----------------------------------------------#
#■指定文字数で分割する
#----------------------------------------------#
sub str_jfold{
  my $str    = shift;       #指定文字列
  my $byte   = shift;       #指定バイト
  my $j      = new Jcode($str);
  my @result = ();
 
  foreach my $buff ( $j->jfold($byte) ){
    push(@result, $buff);
  }
 
  return(@result);
}

実行例

H
e
l
l
o
!
は
日
本
語
で
コ
ン
ニ
チ
ワ
で
す

返却される文字コードがEUCである点に注意

関連

関連書籍

failed to fetch data: unkown error

Joseph N. Hall, Joshua…
ISBN 4798139815
¥ 4,104

コメント

コメントを入力. Wiki文法が有効です:
R I H J Q