質問: csv形式のデータの一部を削除して、上書きする方法 前回も似たような(?)質問をしたんですが 今回も質問させてください。csvに関して(csvだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。
回答: 掲示板などのcgiで、記事削除機能が同じようなことをやっています。 1行づつ読み出して、テンポラリ変数に入れて行きます。 その時、削除対象のデータだけ入れずにおけば、対象行を削除したテンポラリ変数ができますので、それをファイルに書き込みます。 わかりますか?↓こんな感じです。 foreach $line (@data) { ($idno,$field1,$field2,$field3) = split(/\,/,$line); chop($field3); if ($target ne $idno){ $tempvalue = "$idno,$field1,$field2,$field3\n"; $temp[$i] = $tempvalue; } $i++; } open (file, ">$datafile") or die "error"; print file @temp; close (file);