• 締切済み

改行のないテキストを指定バイトで改行したい

質問したい内容は表題の通りですが、数十メガある膨大なテキストを 指定されたバイトで改行コードを入れたいです。(chompの逆をやりたい) syswriteでできるのかな?と思って試行錯誤しているのですが、うまくいきません。テキストは、半角数字+半角カタカナ+半角記号の混合です。 全角はありません。エンコードはUTF-8です。ずっとハマってるので、ヒントをいただけないでしょうか。(ちなみにPerl 5.10/ActivePerlが指定です。) よろしくお願いいたします。

みんなの回答

回答No.3

while(read(STDIN,$buf,80)){print $buf,"\n";} マルチバイトを無視して良いなら、こんな感じかな。(80バイトで千切る例) perl4でも動く古典的なコーディングです。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

#!/usr/bin/perl use strict; use warnings; use feature ':5.10'; my $length = 78; $/ = \$length; open my $input, '<', 'input.txt' or die $!; while (my $chunk = <$input>) { say $chunk; } close $input; こんなんでいかがでしょうか? $/ にスカラー変数のリファレンスをセットすると、その変数の中身の数値に従った読み込みをします。 んで、それで読み込んだらあとはふつーに say すれば改行がくっつくと。 Setting $/ to a reference to an integer, scalar containing an integer, or scalar that's convertible to an integer will attempt to read records instead of lines, with the maximum record size being the referenced integer あー、でも > テキストは、半角数字+半角カタカナ+半角記号の混合です。 > 全角はありません 半角カタカナってutf-8だと1バイトじゃないですよ。3バイト。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

use Jcode; # jcode を使って my $jcode = Jcode->new($string,'utf8'); my @lines = $jcode->jfold(n); # jfold を使う # nは任意の文字数 では?  詳しくはjcode.pmのマニュアルを Jcode - Japanese Charset Handler http://openlab.ring.gr.jp/Jcode/Jcode.html

関連するQ&A