- ベストアンサー
ログファイルの新規作成方法について
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そのままでも、もしファイルがなければ新たに作成してくれるはずですが。 どうしてもファイル存在チェックをしたければ「ファイルテスト演算子」で検索してみてください。
関連するQ&A
- ログを新しい順に保存
始めまして。お世話になります。 初心者ですがどうぞよろしくお願いします。 cgiでメールフォームを作成しており、ログをテキスト形式で保存するように設定しています。 ログ自体は正しく保存できるのですが、 新しい順にログを保存する方法を参考書を元に以下の通り記述したのですが、新しい順になりません。 open OUT,">> log.txt"; print OUT $data,"\n"; close OUT; open IN,"log.txt"; @txt = <IN>; @txt = reverse @txt; close IN; どこを変更すればよいのかアドバイスをいただけませんでしょうか。 よろしくお願いします。
- ベストアンサー
- CGI
- ログファイルの記録数
# ログ更新 unshift(@new,"$num<>$addr\n"); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @new; close(OUT); 上記ログの書込みに、最大保存数を設定したいのですが、どのようにすればいいのでしょうか。 $max = 3; とした場合、3行超えたら古いファイルを消したいと考えています。よろしくお願いいたします。
- ベストアンサー
- Perl
- ファィルの削除直後に作成したファィルにデータが書き込まれません。
配列@arryの要素にデータが入っているとします。 (1)最初に「data.txt」が存在していない場合 open(out,">>data.txt"); foreach(@arry { print out "$_\n"; }; close(out); で、配列のデータは書き込まれます。 (2)最初に「data.txt」が存在している場合 unlink "data.txt"; open(out,">>data.txt"); foreach(@arry) { print out "$_\n"; }; close(out); }; close(FILE); これだと、「data.txt」は作成されますが、 空のファイルで、データは書き込まれません。 unlink "data.txt";以降がない場合は、確実に ファィルは削除されたままです。 一度削除後にデータを書き出したいのですが、教えてください。
- ベストアンサー
- Perl
- 伝言掲示板の作成(超初心者です)
授業の課題で伝言掲示板を作るのですが 行き詰ってるので助けてください。 ファイル名write.htmlで <html> <body> 掲示板プログラム<br> 書き込み内容を指定してください <form action="write.cgi"> <input type="text" name="contents"> <input type="submit"> </form> </body> </html> write.cgiで #!/usr/bin/perl print "Content-type: text/html\n\n"; use CGI qw(:standard); $value = param("contents") ; open(OUT,">contents.txt"); print OUT $value; close(OUT) ; print "<html><body>"; print "書き込みが終了しました"; print "</body></html>"; read.cgiで #!/usr/bin/perl print "Content-type: text/html\n\n"; open(IN,"contents.txt"); $value = <IN>; close(IN); print "<html><body>"; print $value; print "</body></html>" 空のテキストファイルcontents.txtを作成しました。 これで伝言掲示板はできますよね?? では前の書き込みが消えないようにするにはどうした良いですか? あと、装飾したい場合はwrite.htmlにタグを利用して書けばよいのですか?? わかりにくい書き込みですみません。
- ベストアンサー
- CGI
- perl の printでのファイルへの指示にて
独学でmacでパールを勉強しています。 始めてからまだ1週間くらい。 教科書みながら、print命令でファイルハンドルに指示を出してるのですが、 書き込めはできるのですが、 ファイルが無い場合、 新規に自動でファイルが作成されるはずとの記載があったのですが、 何故か、自動でファイルが生成されません。 調べても、設定が必要等言われてますが、 mac自体も初心者でほとんどわかりません。 どのような設定にすればいいのでしょうか? また、ソースに何か悪い所があるのでしょうか? お助けください。 ちなみに下記がソースです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーー #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>アクセスカウンタ</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>test</H1><HR>\n"; if ( open ( FH , "count.txt")){ $cnt = <FH>; close( FH ); $cnt++; print"<CENTER>あなたは${cnt}人目の訪問者です。</CENTER>\n"; if ( open(FH, ">count.txt" )){ print FH $cnt; close(FH); } else { print "ファイルの書き込みオープンに失敗しました。\n"; } } else { print "ファイルの書き込みオープンに失敗しました。\n"; } print "</BODY>\n"; print "</HTML>\n"; __END__ ーーーーーーーーーーーーーーーーーーーーーーーーーー
- ベストアンサー
- Perl
- ファイルの先頭に追加書込みする方法について教えて下さい
今まで、単にファイルの最後にデータを追加するように 下記のように書いていた部分を open(OUT,">>$logfile2") || &error; print OUT "カウント : \[ $pcount \]\n日 時 : \[ $time \]\n"; close(OUT); ファイルの先頭に追加していくようにしたいのですが、うまくいきません。 ミスティーネット・Perl・CGI講座というサイトを参考に下記のようにしてみました。 open(DATA,"+<$logfile2") || &error; seek(DATA,0,0); print DATA "\nカウント : \[ $pcount \]\n日 時 : \[ $time \]\n"; close(DATA); このように書くと追加書込みではなく、書き換えになってしまいます。 また、+<の部分を>>にすると変更前と同様、ファイルの最後に追加されてしまいます。 どこがどういけないのか判る方がみえましたら教えて下さい。 よろしくお願いいたします。
- ベストアンサー
- CGI
- ファイルの破壊について
2人以上の方が同時にファイルの書き込みをすると ログファイルが白紙になったりエラーが起こってしまうらしく、それを防ぐために以下のような書式が open(OUT, "> file.txt"); flock(OUT, 2); print OUT ".......\n"; close(OUT); # closeすると自動的にアンロックされる とほほのWWW入門で記載されていたんですが、このロック方法で本当に大丈夫なのでしょうか とほほさんの解説があまりにも漠然としていて信じがたいんです。 詳しい方、上の方法でも十分かどうかご教授よろしくお願いします。 http://www.tohoho-web.com/wwwperl3.htm#Lock
- ベストアンサー
- 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
- 配列の一部を書き換えてファイルに保存する方法は?
$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
- 中間ファイルを使わずに処理させる方法
cmd1.exe は、標準入力でデータを読み込み、 結果を標準出力するようなプログラムです。 $ cmd1.exe < test.txt d090206 p314159 r214142 $ このcmd1.exeをperlスクリプト内で呼び出し、その結果を求めるやり方として、 従来、次のようなやりかた・・・ open(OUT,">temp.txt") || die "$!"; foreach(・・・){ 中略 print OUT "$_\n"; } close(OUT); my @answer = `cmd1.exe < temp.txt`; foreach(@answer){ : 略 } unlink("temp.txt"); のようなことをしています。 今は、中間ファイルを書き出しては、最後にファイル削除して、ということをやっているのですが、 このような中間ファイルを使わずに、パイプ(?)という仕組みを使って、同じように処理させるには、 どのようにコーディングすれば良いですか? 試してみたこととして、 open(PIPE,"|cmd1.exe"); foreach(・・・){ 中略 print PIPE "$_\n"; } close(PIPE); のようにすれば、exeの呼び出しそのものは出来たのですが、 その標準出力の結果を上手く内部で受け取れません。 よろしくお願い致します。
- ベストアンサー
- Perl
お礼
ありがとうございます。 試したら、無ければ新しいファイルが作成できました。