
perlで日本語文字列を指定幅で折り返すツールを作りたく調べていたところ、Jcodeモジュールを使うのが良さそうであると考えました。
https://manpages.debian.org/testing/libjcode-pm- …
ーーーーーーーーーーーーーーーーーーーー
my $j = new Jcode($str);
my @result = ();
foreach my $buff ( $j->jfold($count) ){
push(@result, $buff);
}
ーーーーーーーーーーーーーーーーーーーー
という感じで、良い感じに折り返してくれるのですが、このままでは禁則処理がされません。
上記URLのドキュメントによると「Perl 5.8.1以降は3番目の引数$krefにEUCの文字列の配列リファレンスを 渡すことで、簡易的な行頭禁則処理(ぶら下がり)を行えます。」とあるのですが、具体的に$krefをどのように指定すれば良いかわからず往生しています。
スクリプトの文字コードをeucで作成して、
my @k = ("。", "、");
$j->jfold($count,,\@k)
などとやってもダメでした。
どのようにすれば、禁則処理を有効にできるでしょうか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
禁則処理を有効にするためには、$krefに禁則処理を行う文字列の配列を指定する必要があります。
この配列は、禁則処理を行う文字のEUC-JPコードを要素として持つ必要があります。例えば、以下のコードは、句点と読点の禁則処理を行うことができます。
use Jcode;
my $str = "この文章は、禁則処理をテストしています。";
my $j = new Jcode($str);
my @result = ();
foreach my $buff ( $j->jfold($count,,["。", "、"]) ){
push(@result, $buff);
}
print join("\n", @result);
$krefに指定する文字列の配列は、空配列を指定することもできます。この場合、禁則処理は行われません。
また、$krefに指定する文字列の配列は、空文字を要素として持つこともできます。この場合、その文字の後ろに続く文字は、必ず行頭に置かれます。
例えば、以下のコードは、句点と読点の禁則処理を行い、句点の後ろの文字は行頭に置きます。
use Jcode;
my $str = "この文章は、禁則処理をテストしています。";
my $j = new Jcode($str);
my @result = ();
foreach my $buff ( $j->jfold($count,,["。", "、", ""]) ){
push(@result, $buff);
}
print join("\n", @result);
なお、Jcodeモジュールは、Perl 5.8.1以降で使用できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dim flag(4) as boolean で配列...
-
Strawberry Perl for Windows ...
-
MATLABの関数で配列の要素を返...
-
エクセルVBAでTransposeの不思議
-
マクロ Publicでの配列定義
-
VBA 多次元配列を用いてグルー...
-
VBA 二次元配列 ループの書き方
-
perlで2次元配列をサブルーチ...
-
プログラミング アルゴリズム
-
VBA 条件
-
UWSCの終了の仕方
-
VBAでの一時停止と再開の方法
-
Do whileでExitせず、ループの...
-
テキストボックスの名前に変数...
-
VB.NETでFTPプログラム
-
xmplayの使い方
-
C言語でファクト関数を使わずに...
-
csh foreachで「*」でエラ...
-
Perlでハッシュや配列で重複す...
-
ListBox 複数選択 で オートフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
Strawberry Perl for Windows ...
-
マクロ Publicでの配列定義
-
クラスに配列を渡す方法
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
Dim flag(4) as boolean で配列...
-
与えられた配列の順にソートす...
-
Excel VBA ユーザーフォームの...
-
VBA 二次元配列の1つ目を増...
-
プログラミング アルゴリズム
-
複数の配列の全ての組み合わせ...
-
二次元配列における要素数のは...
-
VB6で配列の最大値を簡単に求め...
-
バイナリデータの検索(VB.NET2008)
-
VBA 二次元配列 ループの書き方
-
VBA 多次元配列を用いてグルー...
-
VBA 条件
おすすめ情報
ありがとうございます。
以下のとおり試してみました。
--
#!/usr/bin/perl
use Jcode;
$count = 10;
my $str = "この文章は、禁則処理をテストしています。";
my $j = new Jcode($str);
my @result = ();
foreach my $buff ( $j->jfold($count,,["。", "、"]) ){
push(@result, $buff);
}
print join("\n", @result);
--
結果、
--
# ./test.pl | nkf -w
この文章は
、禁則処理
をテストし
ています。
--
となり、やはり禁則処理が働かないようです。もう少し調べてみます。
なお、OSはRocky9、perl 等のバージョンは以下のとおりです。
# perl -v
This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-thread-multi
(with 52 registered patches, see perl -V for more detail)
<snip>
# rpm -qi perl-Jcode
Name : perl-Jcode
Version : 2.07
Release : 30.el9
<snip>
自己解決です。
jfoldメソッドのルーツらしき解説を発見
https://www.donzoko.net/cgi/jencode/
ここに倣って、
my @kinsoku = qw(。 、);
としてもダメだったのですが、ふと思い立って、第2引数に \n を指定したらうまくいきました。
my @kinsok= = ("。", "、");
でも大丈夫でした。
ちょっと釈然としませんが、出来たのでヨシとします。