- ベストアンサー
perlCGIが動かなくないました。改良していただけないでしょうか?
下記のようなperl-cgiをプロバイダのサーバで使っていたのですが、最近、動かなくなりました。 多分、読み込むファイルの大きさが大きすぎて、途中で止まっているのではないかと思います。 (試しに、10M程度のファイルで行うと、問題なく動きました) 因みに、現在のサイズは、50MBくらいです。 これからも、肥大の一途とたどるのですが、なるべく、サーバに負担をかけず同じファイルを作成できないものでしょうか? とても、困っています。 どなたか、改良できる方、何卒、宜しくお願い致します。 #下記は、INfilenemeから、重複する行を削除して、Outfilenameというファイルを作るperlコードです。 open(IN, "INfilename.txt"); @array = <IN>; close (IN); %count; @array = grep(!$count{$_}++, @array); open(OUT, ">Outfilename.txt"); print OUT join("",@array); close (OUT);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
メモリー上に全て読み込むのがマズイのでは?と思います 読んだその場でprintしてしまえば?とか・・・ open(IN, "INfilename.txt"); open(OUT, ">Outfilename.txt"); while(<IN>){ if(!exists($count{$_})){$count{$_}++;print OUT $_;} } close (IN,OUT);
その他の回答 (1)
- agharta
- ベストアンサー率52% (54/103)
こんな感じですかね。 確かめていないので、動かないかも… 用は、一気に@arrayに入れているのが遅くなる原因ではないでしょうか。 ただ、50MBぐらいで負担はかからないような気がするのですが、気のせいでしょうか。 my %count; open(IN, "INfilename.txt"); while (my $line = <IN>) { $count{$line}++; } close (IN); open(OUT, ">Outfilename.txt"); print OUT join("",keys(%count)); close (OUT);
お礼
コードを試してみたところ、無事解決いたしました!! 本当に、ありがとうございました。
お礼
コードを試してみたところ、無事解決いたしました!! 本当に、ありがとうございました。