キーの桁数とカンマの次の位置を更新する様に変更。
<<ソース>>
#!/usr/bin/perl
$keyno = @ARGV[0]; #更新対象レコードのキー
open(FL,"+<data.txt");
$wk = 0;
while(<FL>){
if(/^$keyno\,/) { #該当のレコード
print $_;
print "$wk\n";
seek(FL,($wk+length($keyno)+1),0); #更新位置をセット
print FL "1"; #削除フラグを書込み
last;
}
$wk = tell(FL); #次のレコードの先頭位置
}
close(FL);
exit(0);
<<実行してみる>>
naru@KURO-BOX:~/test$ cat data.txt
1,0,AA
2,0,BBBBB
10,0,CCCCCCC
20,0,DD
200,0,EEE
5000,0,FFFFFF
naru@KURO-BOX:~/test$ ./test2.pl 20
20,0,DD
30
naru@KURO-BOX:~/test$ cat data.txt
1,0,AA
2,0,BBBBB
10,0,CCCCCCC
20,1,DD
200,0,EEE
5000,0,FFFFFF
おおー。ちゃんと更新されている。
これでキーの桁数が変わってもOKだね。
|