
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ランキング
-
perlで2次元配列をサブルーチ...
-
エクセルVBAでTransposeの不思議
-
二次元配列のインデックスについて
-
マクロ Publicでの配列定義
-
perl 配列の要素数について
-
可変長配列を、動的確保した固...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
vb.netです。2次元配列の要素を...
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
VBAで3秒だけ時間を止めたい
-
ハッシュマーク以降のアドレス取得
-
文字列を変数名として扱う方法
-
英語でのシャープとコメの呼び...
-
エクセルの当番表を作っていま...
-
VBのReturnの使い方
-
UWSCに制限時間を付けたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
文字の整列(printf)
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
二次元配列のインデックスについて
-
Excel VBA ユーザーフォームの...
-
Strawberry Perl for Windows ...
-
バイナリデータの操作
-
perlで配列の要素が空なのを知...
-
perlの配列追加について
-
perl 配列の要素数について
-
グループ分けの仕方について
-
最後のフィールドを抜き出したい。
-
リストボックスに縦スクロール...
-
チェックボックスのperlでの値...
-
二つの配列から連想配列を作る方法
-
変則的なスタック配列を使う
-
二次元配列における要素数のは...
-
配列を使わずに、数字(連番)...
おすすめ情報
ありがとうございます。
以下のとおり試してみました。
--
#!/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= = ("。", "、");
でも大丈夫でした。
ちょっと釈然としませんが、出来たのでヨシとします。