- ベストアンサー
Perl ブログ等の記事の編集方法と注意点|ブログ投稿後に記事を編集・修正する方法
- Perl ブログ等の記事の編集について教えてください。ブログ等の記事を書き込むまではできました。記事を編集・修正したい場合の方法や注意点を教えてください。
- ブログや記事を書き込む際はできるけれど、書いた後の編集や修正の方法がわからない場合、どうすればいいのか迷いますよね。本記事では、Perl を使用して書かれたブログや記事の編集方法と注意点について、詳しく解説します。
- Perl を使用して書かれたブログや記事を編集・修正する方法を教えてください。具体的なソースコードや手順を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いつものクセで、先の回答で $_ を使ってしまいました。 $_ のところは $data に置き換えてください。
その他の回答 (2)
- hok212
- ベストアンサー率66% (100/150)
削除・編集は次のようにやれば出来るはずです。 ※動作確認をせず、頭の中で組んだスクリプトですので、間違っている場合はご容赦を 【削除】 foreach $data (@DATA) { ($category,$title,$name,$text) = split(/,/, $data); if ($category == $no) { next; } else { push(@newArray,$_); } } 【編集】 foreach $data (@DATA) { ($category,$title,$name,$text) = split(/,/, $data); if ($category == $no) { push(@newArray,"$no,$revTitle,$revName,$revText\n"): # 編集後の値を$revXXXXとしています。ここは自由に使い分けてください。 } else { push(@newArray,$_); } } あとは@newArrayを元のファイルに戻してやればOKです。 ※ $no がフォームから渡ってきた削除対象の番号です。
お礼
ありがとうございました。 編集及び削除することができました。
- hok212
- ベストアンサー率66% (100/150)
カテゴリー値(log.txtの一番左のフィールド)が一意の値であるのなら、次の手法でいけます。 なお、編集/削除ボタンは一組あれば十分です。 ※テキストベースのファイルを編集するには、一意の値をもつフィールドを用意したほうがやりやすいです。 #/usr/bin/perl use CGI; $myscript = 'test.cgi'; $FILE = 'log.txt'; $query = new CGI; $no = $query->param('no'); $mode = $query->param('mode'); if ($mode eq "編集") { &editForm; } elsif ($mode eq "削除") { &delForm; } else { &init; } sub init { open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; print "<form action=\"$myscript\" method=\"POST\">\n"; for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="$category">$category - $title - $name - $text<br />\n); } } if ($i > 0) { print qq(<input type="submit" name="mode" value="編集">\n); print qq(<input type="submit" name="mode" value="削除">\n); } print "</form>\n"; } #編集フォーム sub editForm { } #削除確認フォーム sub delForm { } これでラジオボタン「no」の値にカテゴリー値が入り、編集(または削除)フォームに渡すことが出来ます。 ※値渡しをするときはCGI.pm を使ったほうが圧倒的に楽です。 編集(または削除)フォーム内で、該当のカテゴリー値のレコードのみを抜き出すには、次のようにします。 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; foreach (@DATA) { ($category,$title,$name,$text) = split(/,/, $_); if ($category == $no) { last; } } これで $category,$title,$name,$text が、先のフォームのラジオボタンで選択した値のみ抽出されます。
お礼
radioタイプ選択後、ボタンをクリックし、値を抽出するとこまで ご掲示して頂いたソースで実行確認できました。 しかしこの先の編集、削除する場合 どのような処理をするのでしょうか? 削除は「splice」・・・? 編集は「unshift」・・・? 現在、削除はspliceでradioタイプのNoを抽出し splice @DATA, $NO, 1; このような感じで削除させているのですが、これは同じ要領なのでしょうか? 編集は、抽出した値を <input type="text" name="各名前" value="受け取った値"> のようにして一度textに放り込んでから、 それを変更する形になるのでしょうか・・・?
補足
コメントありがとうございます!
お礼
ありがとうございました。 またわからないことがありましたら、よろしくお願いいたします。