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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 特定の単語以外が含まれる行全体を削除したい 2 2021/11/03 18:55
- Excel(エクセル) IF文の管理を簡単にしたい 4 2021/11/07 11:23
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- 英語 これも連鎖関係代名詞でしょうか? 6 2021/12/29 21:11
- C言語・C++・C# C言語の問題です。 1 2021/10/21 15:05
- 英語 英語 Father? a father? my father? 4 2021/12/27 22:44
- PHP <HTML>~入る タグ が無いから 文字化けする のかな 1 2021/12/18 13:25
- Perl Perl(Windows)の文法について 7 2021/12/04 13:59
- その他(プログラミング・Web制作) VBAで特定文字列がある場合にシート見出しの色を変更したい。 3 2021/10/27 15:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewに配列の値を表示...
-
二次元配列における要素数のは...
-
Strawberry Perl for Windows ...
-
隣同士の数字を足し合わせる
-
Excel VBA ユーザーフォームの...
-
VBAのautofilter、criteriaの配...
-
VBScript 配列
-
VBA 多次元配列を用いてグルー...
-
Perl/Tkで変数名を使って一気に...
-
組み合わせについての質問です...
-
エクセルVBAでTransposeの不思議
-
perlで配列の要素が空なのを知...
-
マクロ Publicでの配列定義
-
リストボックスに縦スクロール...
-
グループ分けの仕方について
-
クラスに配列を渡す方法
-
VBAでの一時停止と再開の方法
-
画面を強制的に再描画させる方法
-
範囲指定したセルを1つずつ飛...
-
Escキーを押すと、中断する時と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dim flag(4) as boolean で配列...
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
エクセルVBAでTransposeの不思議
-
クラスに配列を渡す方法
-
リストボックスに縦スクロール...
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
文字の整列(printf)
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
Strawberry Perl for Windows ...
-
VBA 二次元配列の1つ目を増...
-
チェックボックスのperlでの値...
-
perl 初等プログラミングについて
-
DBIを使ってSelect文 複数のカ...
-
複数のキーで配列をソートする...
-
Excel(VBA)で配列の要素数を...
-
newで個別に生成した配列にNULL...
おすすめ情報
ありがとうございます。
以下のとおり試してみました。
--
#!/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= = ("。", "、");
でも大丈夫でした。
ちょっと釈然としませんが、出来たのでヨシとします。