cgiログファイルを読み出して下記の様に任意に行数を指定して挿入する方法を教えていただければと思います。
何分、素人なので、その辺りを踏まえて教えていただければ助かります。また、サンプルの様なものがあればご参照お願い致しますm(__)m
[例]
行数・内容
1**************
2//////////////
3++++++++++++++
4--------------
5==============
6##############
上記の状態のログファイルがあるとし、任意の行数(例えば)行数[5]を行数[2]に挿入した場合
[例]
行数・内容
1**************
2==============
3//////////////
4++++++++++++++
5--------------
6##############
と保存しなおす様に出来ますでしょうか?
分かりにくい説明で申し訳ございません。よろしくお願い致します。
よろしくお願い致しますm(__)m
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);
}
No.2
- 回答日時:
各行の長さがばらばらなら、一旦メモリに読み込み→該当箇所の入れかえ→再書き込みが基本です。
CGIというのは仕組みの名前で、特定のプログラム言語や環境を表したものではありません。
例と言われても提示しようがありません
No.1
- 回答日時:
my @lines = <DATA>;
my $line = splice @lines, 4, 1;
splice @lines, 1, 0, $line;
print $_ for @lines;
# **************
# ==============
# //////////////
# ++++++++++++++
# --------------
# ##############
__DATA__
**************
//////////////
++++++++++++++
--------------
==============
##############
この回答への補足
早速のお返事ありがとうございます。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Excel(エクセル) vba レジストリの値を読み込教えてください教えてください 1 2023/07/14 14:09
- その他(ビジネススキル・経営ノウハウ) 車両購入時の仕訳を教えてください 1 2022/06/23 17:45
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Excel(エクセル) Excelで、あるセルだけ入力させたい、オートフィルターも使わせたい際のシートの保護 2 2023/02/23 15:14
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
めちゃきれい
-
(フリーの)ツリー掲示版CGI、...
-
apacheでPerl CGIが作動せず、5...
-
CGI.pmはもう古い!?
-
POSTメソッドの最大容量について
-
3DCG
-
ホームページにメールフォーム...
-
cgiからsendmailを送信で文字化け
-
フォームを再送信しますか?
-
/bin/awk '{print $5}'ってどう...
-
入力フォーム(電話番号)
-
誕生日占いをプログラムで作成...
-
number 改行が追加できない
-
生成AI画像について
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl/cgi リダイレクトができない
-
htmlからパラメータで、cgiに渡...
-
フォントサイズを変えるには?
-
CGI経由でのPDFファイルをダウ...
-
CGI
-
プログラム実行中の待機ページ...
-
メイルフォームの本文が文字化け
-
Yomi-Searchのカテゴリを縦並び...
-
cgi(perl) sendmailの使い方
-
sendmail 送信先を複数設定す...
-
iis+cgiでmultipart/form-data...
-
サーバー上のPDFにCGIでパスワ...
-
<FORM TYPE="subumit">でデータ...
-
指定のフォルダに指定のファイ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
おすすめ情報