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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
アルファベットに付いて質問します。 小文字のエル【l】と大文字のアイ【I】の区別ができません。写真の
Perl
-
Javaって使いますか、もう古いですか?C++とどっちがいいですか?分析でC++使う授業ありましたけ
C言語・C++・C#
-
パイソン、データーサイエンス。辞書で2つ囲むのはなぜですか。[[ ]]
オープンソース
-
-
4
下記問題の答えがD"になる意味がわかりません。 Cだと思ったのですが、違うのですか? なぜ、bがf"
Java
-
5
C言語について。
C言語・C++・C#
-
6
基本情報技術者の擬似言語プログラム このプログラムの答えは(ウ)です。でも配列に格納されてる順番が良
Visual Basic(VBA)
-
7
C言語などをマスターして、人生に何かメリットありますか???
その他(プログラミング・Web制作)
-
8
ホリエモン ひろゆきはプログラマーになればお金が儲かると言いますが嘘で? IT土方というのは正しい
その他(プログラミング・Web制作)
-
9
Pythonで質問です。 for文で所謂カウンタ制御型のループ処理をすると思いますが、二重ループって
オープンソース
-
10
サクラエディタ・マクロ → VSCode・マクロに変更
その他(プログラミング・Web制作)
-
11
C言語について。
C言語・C++・C#
-
12
SFTPなどは使わないホームページやプログラムファイルの公開方法
PHP
-
13
Python超入門者です、win pcにv3.1インストールして入力してたった3行のコマンドを入力s
その他(プログラミング・Web制作)
-
14
Pythonでのstrip()とsplit()の使い方
その他(プログラミング・Web制作)
-
15
C言語について。
C言語・C++・C#
-
16
C言語について。
C言語・C++・C#
-
17
Javaについての質問です。 コンパイルした後、 「java Sample」 で実行しようとしても出
Java
-
18
WindowsのPCからコマンドでサーバーにファイルの送受信を行う方法について
サーバー
-
19
Fortran の定数表現について
その他(プログラミング・Web制作)
-
20
スコープ解決演算子を解読できるサイトを教えて!
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスに配列を渡す方法
-
マクロ Publicでの配列定義
-
delphi の 標準偏差のプログラ...
-
組み合わせについての質問です...
-
二次元配列のインデックスについて
-
perlで2次元配列をサブルーチ...
-
jcode->jfold で禁則処理
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
再帰関数のインライン展開
-
エクセルの当番表を作っていま...
-
UWSCの終了の仕方
-
ループフリー
-
VB2010でCSVファイルの読み込み
-
【VBA】全て空白のセルの列の非...
-
繰り返し処理で50音順にする方法
-
select case について
-
Excel VBAでIf 条件式 then か...
-
ExcelVBAでのデータ型変換、も...
-
連想配列のサイズ制限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
リストボックスに縦スクロール...
-
Excel VBA ユーザーフォームの...
-
マクロ Publicでの配列定義
-
エクセルVBAでTransposeの不思議
-
二次元配列における要素数のは...
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
文字の整列(printf)
-
perlで配列の要素が空なのを知...
-
jcode->jfold で禁則処理
-
VB6で配列の最大値を簡単に求め...
-
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= = ("。", "、");
でも大丈夫でした。
ちょっと釈然としませんが、出来たのでヨシとします。