• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ログファイルの編集についてお聞きしたいのですが・・)

ログファイル編集方法とは?

このQ&Aのポイント
  • cgiログファイルを読み出して任意の行数に挿入する方法を教えてください。
  • ログファイルの編集方法を分かりやすく解説します。
  • 素人でもできるログファイルの編集方法を紹介します。

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

  • ベストアンサー
回答No.3

例えばこんな感じですか? #!/usr/local/bin/ruby require "cgi" target_filename = "program_data.txt" def insert_line_before(lines, from, to) to_insert = lines.delete_at(from) to -= 1 if from < to lines.insert(to, to_insert) end def modify_file(filename, from, to) f = File.open(filename, File::RDWR) f.flock(File::LOCK_EX) lines = f.readlines insert_line_before(lines, from, to) f.rewind f.write(lines) f.truncate(f.pos) # may not be needed. f.close return lines end print "Content-type: text/html\n\n" cgi = CGI.new from = cgi.params['from'][0] to = cgi.params['to'][0] if from.to_i >= 1 and to.to_i >= 1 then modify_file(target_filename, from.to_i - 1, to.to_i - 1) print "<html><body>done</body></html>" else print "<html><head><title>Insert test</title></head><body>" print "<ol>" f = open(target_filename, "r") {|file| file.flock(File::LOCK_SH) while line = file.gets printf "<li>%s</li>", line end } print "</ol>" print <<EOS <form method="POST"> Move the line [<input type="text" name="from">] before the line [<input type="text" name="to">]. <input type="submit"> </form></body></html>" EOS end insert_line_before(lines, from, to)で全ての行が入った配列を受け取って、from行番目の文字列をto番目の行の前に挿入します。fromの方がtoよりも小さい場合はfromの部分を抜いたことでtoのところの位置が変わっているので、そのぶん減算します。また、modify_file(filename, from, to)はこのinsert_line_beforeを使うことで、ファイルを開いて指示された変更を行います。 余談ですが、このコアな部分をPerlで書くとこんな感じです。 sub insert_line { my ($lines, $insert_from, $insert_to) = @_; my @to_insert = splice(@$lines, $insert_from, 1); $insert_to -= 1 if $insert_from < $insert_to; splice(@$lines, $insert_to, 0, @to_insert); }

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

各行の長さがばらばらなら、一旦メモリに読み込み→該当箇所の入れかえ→再書き込みが基本です。 CGIというのは仕組みの名前で、特定のプログラム言語や環境を表したものではありません。 例と言われても提示しようがありません

回答No.1

my @lines = <DATA>; my $line = splice @lines, 4, 1; splice @lines, 1, 0, $line; print $_ for @lines; # ************** # ============== # ////////////// # ++++++++++++++ # -------------- # ############## __DATA__ ************** ////////////// ++++++++++++++ -------------- ============== ##############

ukey9
質問者

補足

早速のお返事ありがとうございます。 data.cgi というログファイルから読み込み、htmlで <form method="post" action="data.cgi"> 移動する行数<input type="text" name="a" value="" /> 移動先の行数<input type="text" name="b" value="" /> <input type="submit" value="挿入" /></from> という形で書き換え、data.cgiに上書きする方法はどうすれば良いですか? 分かりにくいご説明で申し訳ございません。 お手数とは存じますがよろしくお願い致します。

関連するQ&A