• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl ブログ等の記事の編集)

Perl ブログ等の記事の編集方法と注意点|ブログ投稿後に記事を編集・修正する方法

このQ&Aのポイント
  • Perl ブログ等の記事の編集について教えてください。ブログ等の記事を書き込むまではできました。記事を編集・修正したい場合の方法や注意点を教えてください。
  • ブログや記事を書き込む際はできるけれど、書いた後の編集や修正の方法がわからない場合、どうすればいいのか迷いますよね。本記事では、Perl を使用して書かれたブログや記事の編集方法と注意点について、詳しく解説します。
  • Perl を使用して書かれたブログや記事を編集・修正する方法を教えてください。具体的なソースコードや手順を教えていただけると助かります。

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

  • ベストアンサー
  • hok212
  • ベストアンサー率66% (100/150)
回答No.3

いつものクセで、先の回答で $_ を使ってしまいました。 $_ のところは $data に置き換えてください。

Cells231
質問者

お礼

ありがとうございました。 またわからないことがありましたら、よろしくお願いいたします。

その他の回答 (2)

  • hok212
  • ベストアンサー率66% (100/150)
回答No.2

削除・編集は次のようにやれば出来るはずです。 ※動作確認をせず、頭の中で組んだスクリプトですので、間違っている場合はご容赦を 【削除】 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 がフォームから渡ってきた削除対象の番号です。

Cells231
質問者

お礼

ありがとうございました。 編集及び削除することができました。

  • hok212
  • ベストアンサー率66% (100/150)
回答No.1

カテゴリー値(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 が、先のフォームのラジオボタンで選択した値のみ抽出されます。

Cells231
質問者

お礼

radioタイプ選択後、ボタンをクリックし、値を抽出するとこまで ご掲示して頂いたソースで実行確認できました。 しかしこの先の編集、削除する場合 どのような処理をするのでしょうか? 削除は「splice」・・・? 編集は「unshift」・・・? 現在、削除はspliceでradioタイプのNoを抽出し splice @DATA, $NO, 1; このような感じで削除させているのですが、これは同じ要領なのでしょうか? 編集は、抽出した値を <input type="text" name="各名前" value="受け取った値"> のようにして一度textに放り込んでから、 それを変更する形になるのでしょうか・・・?

Cells231
質問者

補足

コメントありがとうございます!

関連するQ&A

専門家に質問してみよう