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

下記のような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);

A 回答 (2件)

メモリー上に全て読み込むのがマズイのでは?と思います


読んだその場でprintしてしまえば?とか・・・

open(IN, "INfilename.txt");
open(OUT, ">Outfilename.txt");
while(<IN>){
if(!exists($count{$_})){$count{$_}++;print OUT $_;}
}
close (IN,OUT);
    • good
    • 0
この回答へのお礼

コードを試してみたところ、無事解決いたしました!!
本当に、ありがとうございました。

お礼日時:2006/08/25 18:15

こんな感じですかね。


確かめていないので、動かないかも…
用は、一気に@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);
    • good
    • 0
この回答へのお礼

コードを試してみたところ、無事解決いたしました!!
本当に、ありがとうございました。

お礼日時:2006/08/25 18:17

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