くだすれPerl(超初心 ..
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
529:nobodyさん 07/12/06 01:32:40 NHCKs2bj あるファイルの一行目の文章のみ手直ししたいと思っています。 自分なりに考えた方法では open(FILE,"+>./log.dat"); while(<FILE>){ @LOG=$_; } $LOG[0]=~/(hoge)(hoge)/; shift @LOG; unshift @LOG,"hoge3$2"; print FILE @LOG; 上記では、whileの中で一行目以降の行も配列に格納している点が、初心者の私には無駄に感じてしまいます。 もしこれより簡潔で、サーバーへの負荷も少なくてすむ方法をご存知の方がいらっしゃいましたら、ご教授ください。 530:nobodyさん 07/12/06 05:14:19 >>528 Perlではないけれども、自鯖環境なら、my.cnfに log=/var/log/・・・ てな感じで記録すれば全てのクエリのlogが取れる。 レン鯖環境でも、デバッグ目的なら、自前のPCで同じことをすればよい。 (UnixだろうとWinだろうと、mysqlのversionが同じなら、クエリレベルでは全くの互換) >>529 open(FILE,"<./log.dat"); open(OUT,">./logout.dat); $row = <FILE>; $row = うんたらかんたら・・・ print OUT $row; while(<FILE>){ print OUT $_; } close(FILE); close(OUT); オレならこうするかな。 既存ファイルの”ケツ”に足すのなら、">>file.name"で簡単だけど、頭だけを変更したいとなったら、 ファイルの内容を一旦全て読み込まないといけなかったんではなかったかな。 (変更前と変更後の一行のバイト数が同じになるとは限らないから。) この後でRenameするなどしたらよし。 (自分の場合は、どんな時でも、基本的に変更前のbackupをとって置く性質なんで、確実に不要とわかってから元を消すようにしてる。) もうひとつゆうと、ウチの環境では、 @log = <FILE>; とするよりも、 while(<FILE>){ push(@log,$_) } とか、 $log = join('',<FILE>);とかするほうが、 圧倒的に早い(WinXp + ActivePerl-5.8.8で、1.5倍〜2倍くらい早い。よその環境は知らない。)
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4296日前に更新/307 KB
担当:undef