• ベストアンサー

printfを使ってファイルを作成したい

お世話になります。 下記のような形でprintf構文を使ってファイルをオープンさせたいと思っているのですが、画面上に数字が00010203..と表示されてしまいます。 どなたかご教授願えませんでしょうか。 @list = (0, 1, 2, 3, 4, 5); foreach $_(@list) { $a=$_; $view=printf ("%02d",$a); open(OUT,">$view.html"); close(OUT); }

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

printfは、ファイルハンドルを指定しない場合、標準出力に書き出します。 $view=sprintf("%02d",$a); にしたらどうでしょう

taku0
質問者

お礼

sprintfで指定する事で、イメージ通りいきました。 いつも大変参考になります。 ご回答頂き有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイル作成時

    0~5までのHTMLファイルを作成したいと考えているのですが、下記2パターンでの実現方法をご掲示頂けませんでしょうか --------------------------------------------------------------- 1.下記の関数Aの中から関数Htmlを呼び出し、@list分n$_.htmlファイルを作成するというものなんですが print時、@aaaが(中身が空みたいで)読まれておらず、ファイル出力結果の内容は空行後、ファイル毎に ファイルの数字があるだけの状況です。 どうすれば数字.htmlファイル毎にsub Htmlの内容を表示後、その中に$aを入れる事ができますでしょうか sub A{ @list = (0, 1, 2, 3, 4, 5); foreach $_(@list) { @aaa = &Html($_); open(OUT,">$_.html"); print OUT "@aaa{$_}\n$_"; close(OUT); } } sub Html{my($a)=@_; print <<HTML; <HTML lang=ja > <HEAD> <TITLE></TITLE> <BODY>test$a </BODY></HTML> HTML } --------------------------------------------------------------- 2.sab Aの関数内にsub Htmlの内容自体を持ってくる形で実現する場合について これも同様に@aaaが(中身が空みたいで)読まれておらず、ファイル出力結果の内容は空行後、ファイル毎に ファイルの数字があるだけの状況です。 sub A{ @list = (0, 1, 2, 3, 4, 5); foreach $_(@list) { @aaa = print <<HTML; <HTML lang=ja > <HEAD> <TITLE></TITLE> <BODY>test$_ </BODY></HTML> HTML open(OUT,">$_.html"); print OUT "@aaa{$_}\n$_"; close(OUT); } } どなたか上記2点についてのいずれかでも結構ですので、ご教授願えませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • foreach構文をwhile構文で実現したい。

    下記にありますforeach構文をwhile構文で実現しようと試みているのですが 何故か同じように実現できず、無限ループになっているような気がします。 どこに問題があるのか当方ではわからない為、どなたかご教授いただけませんでしょうか。 ------------------------------ $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD ------------------------------ ■成功版 open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { chomp; ($a, $b) = split(/<>/, $_);#$_は省略できます。 print OUT "'$a'=>'$b',\n"; } close(OUT); ■取組版 open(IN, "<list1.txt"); @datas2 = <IN>; close(IN); open(OUT, ">date2.txt"); while (@datas2) { s/^/'/; s/<>/'=>'/; s/$/',/; print OUT; } close(OUT);

    • ベストアンサー
    • Perl
  • ログファイルの新規作成方法について

    初心者の質問ですが、分かる方がいらっしゃればお願いします。 予め設置されたファイル(abcd.txt)を開いて書き込み保存は下記の構文でわかります。 もし、ファイルがない状態で新しくabcd.txtの作成と書き込みをするにはどうすればよいのでしょうか? open(OUT,">>abcd.txt"); print OUT "$sampleA,$sampleB,$sampleB\n"; close(OUT);

    • ベストアンサー
    • CGI
  • ファイルの最後の行から表示させる(最新情報を5回分だけ表示)

    ファイルの最後に1行追加し、6行以上になるとファイルの先頭を1行削除。 表示は最後の行から行うスクリプトを作りたいのです。 新しい情報を5回分だけ表示する様にしたかったのですが、余りにも力技なのでもう少しスマートにやる方法を教えてもらえませんか? ----sort.txt---- 1a 2b 3c 4d ---------------- #!/usr/bin/perl $fname = "sort.txt"; print "Content-type: text/html;\n\n"; $aaa="5e"; open(OUT, ">>$fname"); flock(OUT, LOCK_EX); print OUT "$aaa\n"; flock(OUT, LOCK_NB); close(OUT); open(IN, "$fname"); $cnt = "0"; while($line = <IN>){ $a[$cnt] = "$line"; $cnt++; } close(IN); if($cnt > 5){ open(OUT, ">$fname"); flock(OUT, LOCK_EX); $cnt = "0"; while($cnt < 6){ if($cnt > 0){ print OUT "$a[$cnt]"; } $cnt++; } flock(OUT, LOCK_NB); close(OUT); } $cnt = "0"; open(OUT, "$fname"); @buff = <OUT>; close(OUT); foreach $line ( reverse @buff ){ $cnt++; print "$line<br>\n"; } exit();

    • ベストアンサー
    • Perl
  • 配列の一部を書き換えてファイルに保存する方法は?

    $dicname ='GermJ.txt'; open(IN, "$dicname"); @list = <IN>; close(IN); 読み込んだ配列@listの5番目のデータを'aaaaaaaaaa'に書き換えたいのですが、 $list[5]='aaaaaaaaaaaaaaaaa'; open(OUT, "> $dicname"); foreach (@list) { print OUT $_; } close(OUT); とやって、ファイルの中身を調べると、6番目の文字列データが5番目の文字列データの後ろにくっついてしまっています。 改行マークを $list[5]='aaaaaaaaaaaaaaaaa',\n;のように行末に追加しても、次の行とのあいだに空間が生まれます。基本的なファイル書き込みの知識をお尋ねして申し訳ありませんが,どうかお教えください。

    • ベストアンサー
    • Perl
  • Perlで2つのテキストファイルの処理する方法

    めぐみです。 tatsu99さま、以下のプログラムを親切にアドバイス頂きまして本当にありがとうございました。 追記で質問させて頂きたいことがあります。 --------------------------------------------------------------- $file_a = shift(@ARGV); $file_b = shift(@ARGV); open FHA,$file_a or die("can't open $file_a"); @data_a = (); while($line=<FHA>){ chomp($line); push @data_a,$line } close FHA; open FHB,$file_b or die("can't open $file_b"); @data_b = (); while($line=<FHB>){ chomp($line); push @data_b,$line } close FHB; foreach $da (@data_a){ printf("%s%d%d%d\n",$da,$data_b[0],$data_b[1],$data_b[2]); printf("%s%d\n",$da,$data_b[0]); printf("%s%d%d\n",$da,$data_b[1],$data_b[2]); printf("%s\n",$da); printf("%s%04d%02d%02d\n",$da,$data_b[0],$data_b[1],$data_b[2]); printf("%s%02d%02d\n", $da,$data_b[1],$data_b[2]); printf("%d%d%d%s\n",$data_b[0],$data_b[1],$data_b[2],$da); printf("%d%s\n",$data_b[0],$da); printf("%d%d%s\n",$data_b[1],$data_b[2],$da); printf("%s\n",$da); printf("%04d%02d%02d%s\n",$data_b[0],$data_b[1],$data_b[2],$da); printf("%02d%02d%s\n",$data_b[1],$data_b[2],$da); }--------------------------------------------------------- 下記のような内容を追加で出力させることは難しいでしょうか。 1.B.txtを元に下記のように数字だけのデータも追加で出力させたかったです(1行目1986,2行目3,3行目6の場合) 198636 1986 36 19860306 0306 2.A.txtを元にA.txtから下記の内容も追加で出力させたかったです(4行目以降は無視して構いません)。 1行目と2行目 2行目と3行目 3行目と1行目 2行目と1行目 1行目と3行目 3行目と2行目 以上、何卒よろしくお願いいたします。

  • 1ファイルずつ読み込みたい

    ウィンドウズ環境でactive perlを利用しています。 あるディレクトリーの中に2000位のファイルが入っており、このファイルを読み込んで置換処理を行うため下記のようなperlを作っています。 1ファイルはおおよそ3000行くらいです。 foreach(<*.html>) { open(IN_FILE, $_) || die; open(OUT, ">$_.tmp") || die; @record=<IN_FILE>; foreach $record (@record){ $record =~s/aaa/bbb/isg; } print OUT @record; close( IN_FILE); close( OUT); rename("$_.tmp", $_) ; } 当たり前かもわかりませんが、メモリー不足になり処理が中断します。 ディレクトリーの中のファイル数を600程度に少なくすると処理が完了します。 そこで質問なのですが、ディレクトリーの中のファィルを一度に全部読み込まず、1ファイルずつ順次読み込んでいくことはできないでしょうか。 最初の1行目のforeachをwhileに変えたりしたのですがうまくいきません。 対応策あればご教示ください。

    • ベストアンサー
    • Perl
  • 2次元配列の扱い

    2次元配列のようなものについてどなたかご教授ください。 たとえば 1,2,3,4 a,b,c,d という2行のテキストデータを読み込んで (["1","2","3","4"], ["a","b","c","d"]) のようようなリストにはできたみたいなんですが それをまたもとのカンマ区切りテキストにできなくて困ってます。 どこが間違ってるのでしょうか。よろしくお願いします。 open(READ,$filename) || &error("Read Error"); @BASE = <READ>; close(READ); @itemlist=(); foreach $num (0 .. $#BASE) { $BASE[$num] =~ s/\n//g; (@item) = split(/\,/,$BASE[$num]); @itemlist = (@itemlist,[@item]); } ####### $dummy=""; foreach $num (0 .. $#itemlist) { $renketu=join(",",$itemlist[$num]) ."\n"; $dummy.=$renketu; } open(WRITE,">$filename"); flock(WRITE,2); print WRITE $dummy; close(WRITE);

    • ベストアンサー
    • Perl
  • 巨大ファイルの行をを逆順に並べ替えたい>perl

    下記、perlスクリプトで通常は逆順に並べ替えることができると思うのですが、ファイルの行数が1000万行程度あり、実行すると、PCのメモリを食いつぶしてしまいまともに動作しません。 どのようにすればよいでしょうか? もしくは、これに相当するようなフリーソフトはありますか? ご存知の方教えてください。 宜しくお願い致します。 #!/usr/local/bin/perl open(OUT, "1all.txt"); open (FH , ">out_all.txt"); print FH foreach( reverse <OUT> ); close(FH); close(OUT);

    • ベストアンサー
    • Perl
  • ファイル読み込み・書き込み

    下記のようにtestディレクトリ内のファイルを読み込み、 それぞれにあるデータを足して、 読み込んだファイルを他のディレクトリに書き出したいのですが、 どのようにしたらよいのでしょうか。 とりあえず、下記はファイルを読み込んで、 なにも足さずそのまま別のディレクトリに移すとこまで、 やりたいと思っていますが、 どうやっていいものか・・・ #!/usr/bin/perl $dir = "test/"; opendir(DIR, $dir); while($file = readdir(DIR)){ open(IN, ">>$dir$file"); @list = <IN>; foreach $dataLine(@list) { print IN $dataLine; } close(IN); } closedir(DIR); ようはファイルに追記したいのですが、 上書きしないで、バックをとっておき、 別のところへ追記したバージョンを生成したいということです。 ご協力お願いします。

    • ベストアンサー
    • Perl