- ベストアンサー
ファイルの入出力と改行
- ファイルの入出力と改行について教えてください
- 縦100文字横70文字のデータが入ったデータファイルを横50文字にして並べ直したい
- 標準出力での試みがうまくいかないので、解決策を教えてください
- みんなの回答 (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;
その他の回答 (2)
- __awa__
- ベストアンサー率100% (5/5)
こんな感じですかね. 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文を上書きのためにもう一つ作ったりもしましたが、うまくいきませんでした。 やはり同じファイルを使ってすべてを上書きすることはできないのでしょうか?
- aigaion
- ベストアンサー率47% (287/608)
@array = <HANDLE>; これは,HANDLEのファイルの中身を行単位で配列にします. ですので,$varに入るのは1行分の文字列であって,1文字ではありません.
補足
早速の回答ありがとうございます。 $varに入るのは1行分の文字列ということで、その場合、どのようにすれば50文字で改行を入れることができるでしょうか? 具体的に教えてください。
お礼
早速の回答ありがとうございました。perl初心者なものでかなりてんぱってました。助かりました。