アプリ版:「スタンプのみでお礼する」機能のリリースについて

前回も似たような(?)質問をしたんですが
今回も質問させてください。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

変な質問でもうしわけございませんが、回答できるかたお願いします。

A 回答 (4件)

掲示板などの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);
    • good
    • 0
この回答へのお礼

回答ありがとうございました
早速実行してみたところ
何とかできました。

今後も(!?)よろしくおねがいします

お礼日時:2002/05/17 01:35

ごめんなさい#2は無視してください。

Perlなんですね。
    • good
    • 0

要するに配列の任意の要素を削除したいということですね?


配列の要素を削除するには splice 関数を使います。
詳しくはマニュアル等を見てください。

以下、簡単な例です。

@array = qw(
aaa,bbb,ccc,ddd
eee,fff,ggg,hhh
iii,jjj,kkk,lll
mmm,nnn,ooo,ppp
qqq,rrr,sss,ttt
);

splice @array, 1, 1; # 配列要素2番目$array[1]を削除

ファイルの更新まで含めるとこんな感じでしょうか。
--------------------------------------------------
open(FILE, "+< file.txt") or die $!;
@lines = <FILE>;
splice(@lines, 1, 1);
truncate(FILE, 0, 0);
seek(FILE, 0, 0);
print FILE @lines;
close(FILE);
--------------------------------------------------
    • good
    • 0
この回答へのお礼

回答ありがとうございました
配列はいろいろと使うので
ためになりました。

今回は使用しませんでしたが、
なんかあったら使わせていただきます。

お礼日時:2002/05/17 01:37

この質問の趣旨というか目的はどんなところにあるのでしょうか?



単に1回限りならメモ帳で開いて削除すればOKですが、そういうことではないんですよね。配列と書いてありますし、・・・
プログラムが知りたいのでしょうか。またそうだとして、言語は?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!