↓これでもこわれる?(CSVの処理はPerlメモ参考にしてます)
use strict;
use Fcntl qw(:flock);
$tmpfile = "$datafile".".$$.". time() .".csv"; #万が一リネーム失敗したときのために、
#ユニークなファイル名にしておく
open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!"); #ロックファイルを作成する
#(★注:ロックファイルは、各CSVごとにユニークに)
flock (LOCKF, LOCK_EX); #ロックファイルをflockする
open(IN, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く
open(TMP,"> $tmpfile"); #テンポラリファイルを作成
while ($line = <IN>){
$line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
#必要なものだけをEUCにして、出力時にSJISにする
foreach $value (@values){
&jcode::convert(\$value, "euc");
};
#CSV形式に変換
$newline = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values;
print TMP "$newline\n" ;#テンポラリファイルに1レコード書き込み
}
close TMP;
close IN;
unlink $datafile;
rename ($tmpfile, $datafile) or die ("cannot rename : $!");
close LOCKF;
ニュース
- 【W杯】ブラジルDF、塩貝に耳打ちした後、耳を触る ブラジルで「小僧」とあしらう意味 ブラジルFWは「ちっぽけな奴め!」 [ネギうどん★]
- 【W杯】ブラジルFWクーニャ、塩貝へ「これで俺らのことが分かっただろう」SNS投稿 「謙虚になれよ」が繰り返される曲流す ★2 [ネギうどん★]
- 日本、大学を800から250-400に削減、高齢者の自己負担を原則3割に変更へ [お断り★]
- 【サッカー】塩貝健人、挑発されるも「仕方ない」 出番なしで…発言を弁解「弱いと言いたかったわけじゃ」 [王子★]
- 【円安】1ドル162円台まで下落 円相場が39年半ぶりの円安ドル高水準に ★2 [ぐれ★]
- 【W杯】ブラジルに敗れた森保監督「これからも世界一を目指して日本のために頑張りたい」★2 [ネギうどん★]
- 【速報】会期内の全法案成立は厳しい状況と自民幹部 [784319933]
- 【動画】まんさん、バックが下手すぎて炎wwwwwwwwwwwwwwwwww [398059782]
- 人生をエンジョイしてそうなBE、コテ [559038757]
- 【悲報】高市早苗の経歴詐称疑惑を取り上げた日刊ゲンダイ、広報官を煽って大炎上wwwwwww [834922174]
- 【サッカー引いたら何残る】ブラジル代表、日本に勝ったけど民度0 塩貝に耳打ちした後、耳を触る ブラジルで「小僧」とあしらう意味 [595118796]
- 製氷皿で氷作ると真ん中に白い気泡が固まるんだけどさ