
縦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";
No.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;
No.2
- 回答日時:
こんな感じですかね.
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文を上書きのためにもう一つ作ったりもしましたが、うまくいきませんでした。
やはり同じファイルを使ってすべてを上書きすることはできないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
CSVが可変長の場合の検索方法
-
5
cgiでファイルダウンロード時の...
-
6
サーバーのテキストファイルを...
-
7
MySQLにバイナリデータを正常に...
-
8
perlで容量の大きいCSVファイル...
-
9
ファイル結合について
-
10
Perlで フォルダ内の全て...
-
11
ファイルの入出力
-
12
複数ファイルの読み込みについて
-
13
Perlで別ファイルから文字列の抽出
-
14
[perl5.8] utf8で文字出力する...
-
15
Perl cgiの文字化けを直したい ...
-
16
ウィンドウズ XPの検索で拡張...
-
17
複数のCSVを一度にダウンロード
-
18
.pasファイルなどの生成について
-
19
HTMLタグから<IMG SRC="">のパ...
-
20
Perlでのファイル一括読み込み