私はこれをやろうとしています:
単一の単語の大きなファイルをFTPで転送します(〜144,000、1行あたり1単語)
アップロードされたファイルを開き、最大 100 行で 1 行あたり 1 単語のファイルを作成する必要があります (01.txt、02.txt など)。
100 のファイルが作成された後、処理された 100 を元のファイルから削除したいと思います。
サーバーは共有されていますが、必要に応じてモジュールをインストールできます。
さて、私の知識は非常に限られているため、以下のコードは非常に粗雑です。1 つの問題は、ファイル全体を配列に開くことですか? 共有サーバーは、そのような大きなファイルを開いて一度にメモリに読み込むのに十分なメモリを備えていませんか? 最初の 100 行だけが必要です。以下は、ロードするのに十分小さいファイルを開き、配列に 100 行を取得するだけです。他には何もありません。私はそれを素早く入力したので、probにはいくつかの問題がありますが、私の限られた知識と助けの必要性を示しています.
use vars qw($Word @Words $IN);
my $PathToFile = '/home/username/public/wordlists/Big-File-Of-Words.txt';
my $cnt= '0';
open $IN, '<', "$PathToFile" or die $!;
while (<$IN>) {
chomp;
$Word = $_;
$Word=~ s/\s//g;
$Word = lc($Word);
######
if ($cnt <= 99){
push(@Words,$Word);
}
$cnt++;
}
close $IN;
本当にありがとう。
さて、私は以下のコードを実装しようとしています:
#!/usr/bin/perl -w
BEGIN {
my $b__dir = (-d '/home/username/perl'?'/home/username/perl':( getpwuid($>) )[7].'/perl');
unshift @INC,$b__dir.'5/lib/perl5',$b__dir.'5/lib/perl5/x86_64-linux',map { $b__dir . $_ } @INC;
}
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
print CGI::header();
my $WORD_LIST='/home/username/public/wordlists/Big-File-Of-Words.txt';
sed 's/ *//g' $WORD_LIST | tr '[A-Z]' '[a-z]' | split -l 100 -a6 - words.
print 'Done';
1;
しかし、私は得る:
syntax error at split-up-big-file.pl line 12, near "sed 's/ *//g'"
Can't find string terminator "'" anywhere before EOF at split-up-big-file.pl line 12.
最後に: うまくいく簡単な解決策を見つけました。美しくない:
#!/usr/bin/perl -w
BEGIN {
my $b__dir = (-d '/home/username/perl'?'/home/username/perl':( getpwuid($>) )[7].'/perl');
unshift @INC,$b__dir.'5/lib/perl5',$b__dir.'5/lib/perl5/x86_64-linux',map { $b__dir . $_ } @INC;
}
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use diagnostics;
print CGI::header();
my $sourcefile = '/home/username/public_html/test/bigfile.txt';
my $rowlimit = 100;
my $cnt= '1';
open(IN, $sourcefile) or die "Failed to open $sourcefile";
my $outrecno = 1;
while(<IN>) {
if($outrecno == 1) {
my $filename= $cnt.'.txt';
open OUT, ">$filename" or die "Failed to create $filename";
$cnt++;
}
print OUT $_;
if($outrecno++ == $rowlimit) {
$outrecno = 1;
close FH;
}
}
close FH;
ここで十分な情報が見つかりました。ありがとう...