【最大10000ポイント】当たる!!質問投稿キャンペーン!

縦100文字横70文字のデータが入ったデータファイルを横50文字にして並べ直したいと思い、まず試しに標準出力でそれがうまくいくかやってみたのですが、うまくいきません。もしお分かりであれば教えていください。よろしくお願いいたします。

#! /usr/bin/perl
$filename = "reference.txt";

open HANDLE, "<$filename" or die "cannot open :$!";
print "open success\n";

@array = <HANDLE>;
$count = 1;
foreach $var (@array) {
chomp $var;
# print $var;
if($count==50){
print $var, "\n";
}
else{
print $var;
}
$count++;
}
close HANDLE;
print "\n";

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんな感じで文字列を変数に保存しておいて,ファイルの中身を削除してからもう一度書き込むとか.もしくは,別のファイルを書き込みモードで開いて読み込みながら書き込んで,完了したら元のファイルを削除して,新しく作ったファイルを元のファイルの名前でリネームしてもいいかも.



my $filename = "reference.txt";

open FILE, "+< $filename" or die "$!";
my $tmp; # 保存したい文字列を入れておく変数
my $count = 0;
while(my $c = getc FILE){ # 1文字ずつ読み込む
next if($c eq "\n"); # 改行は飛ばす
$tmp .= $c; # $tmpに1文字ずつ連結
$count++; # カウントアップ
$tmp .= "\n" unless($count % 50); # 50文字連結したら改行
}
truncate FILE, 0; # ファイルの中身を全削除
seek FILE, 0, 0; # ファイルの先頭に移動
print FILE $tmp; # $tmpの内容を書き込む
close FILE;
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。perl初心者なものでかなりてんぱってました。助かりました。

お礼日時:2008/07/23 17:30

こんな感じですかね.



my $filename = "reference.txt";

open FILE, $filename or die "$!";
my $count = 0;
while(my $c = getc FILE){ # 1文字ずつ読み込む
next if($c eq "\n"); # 改行は飛ばす
print $c; # 出力
$count++; # カウントアップ
print "\n" unless($count % 50); # 50文字出力したら改行
}
close FILE;
print "\n";

この回答への補足

早速のお返事ありがとうございました。とてもわかりやすいプログラムをありがとうございました。確認しました。
横50文字に整理した形を標準出力しようとしましたが、これを標準出力せず、その結果をもとのファイル、reference.txtにそのまま上書きしたいのですが、
open文を
open FILE, "+<$filename" or die "$!";
とし、
print文を
print FILE $c;
print FILE "\n" unless($count % 50);
としたのですが、うまくいきません。
open文を上書きのためにもう一つ作ったりもしましたが、うまくいきませんでした。
やはり同じファイルを使ってすべてを上書きすることはできないのでしょうか?

補足日時:2008/07/23 10:26
    • good
    • 0

@array = <HANDLE>;


これは,HANDLEのファイルの中身を行単位で配列にします.

ですので,$varに入るのは1行分の文字列であって,1文字ではありません.

この回答への補足

早速の回答ありがとうございます。
$varに入るのは1行分の文字列ということで、その場合、どのようにすれば50文字で改行を入れることができるでしょうか?
具体的に教えてください。

補足日時:2008/07/22 20:18
    • good
    • 0

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング