アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問したい内容は表題の通りですが、数十メガある膨大なテキストを
指定されたバイトで改行コードを入れたいです。(chompの逆をやりたい)

syswriteでできるのかな?と思って試行錯誤しているのですが、うまくいきません。テキストは、半角数字+半角カタカナ+半角記号の混合です。
全角はありません。エンコードはUTF-8です。ずっとハマってるので、ヒントをいただけないでしょうか。(ちなみにPerl 5.10/ActivePerlが指定です。)

よろしくお願いいたします。

A 回答 (3件)

while(read(STDIN,$buf,80)){print $buf,"\n";}


マルチバイトを無視して良いなら、こんな感じかな。(80バイトで千切る例)
perl4でも動く古典的なコーディングです。
    • good
    • 0

#!/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バイト。
    • good
    • 0

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
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!