2011-10-19 13 views
-1

特定の行を検索するには1 GBを超えるテキストファイルを読む必要があります。これは、Perl、PHPまたはJavaで記述する必要があります。このメソッドは、サーバーをロードすべきではありません。1 GBのファイルサイズの行を読み込んで見つけてください

どうすればいいですか?

+0

がファイルを読み込むにINFOMATIONためhttp://download.oracle.com/javase/tutorial/essential/io/file.htmlを参照してください。 Javaで。 – Qwerky

+0

は試験問題か何ですか? –

答えて

1

"正しい仕事のための正しいツール"の姿勢を持ち、新しいツールを学ぶのに気を使うことができれば、perl、awk、sedさえあれば、まさにこの種の仕事のための非常に良いツールです。それ以外の場合、完全な言語があれば、Javaもこの仕事をすることができます。しかし、BufferedReaderのようなバッファされたクラスを使用してください。さもなければ、これは非常に遅くなります。 Perlで

例:

use strict; 
use warnings; 

open INFILE, "<infile" or die; 
open OUTFILE, ">outfile" or die; 
while(<INFILE>) { 
    $_=~s/source-regex/replace-with/g; 
    print OUTFILE; 
} 

私はワンライナーは動作しますが、もう少し複雑であるだろう。 Perlで

+1

複合体?/source-regex/'input.txt> output.txt' – TLP

+0

もし、何らかの置換があると私は理解しました。この1ライナーはうまくいくでしょう。ありがとう。 – 0xCAFEBABE

+0

交換は複雑ではありません。単に 'm //'を 's ///'に変更して印刷してください。同じジャガイモ。 – TLP

2

ここではあまり多くはありませんが、BufferedReaderを作成して、一度に1行ずつ読み込み、探している行があるかどうかを確認してください。

1

:ワンライナーとして

use strict; 
use warnings; 

my $line = 'what to be searched'; 
open my $fh, '<', '/path/to/the/file' or die "unable to open file: $!"; 
while(<$fh>) { 
    chomp; 
    if ($_ eq $line) { 
     print "found $line at line $.\n"; 
     last; 
    } 
} 
1

:スクリプトとして

perl -nwe 'print if /source-regex/' input.txt > output.txt 

use strict; 
use warnings; 

while (<>) { 
    print if /source-regex/; 
} 

使用法:perl script.pl input.txt > output.txt

最適化する方法があります。これ、しかしあなたが与えた情報でそれ以上のことはできません。検索には時間がかかり、正規表現によっては遅くなることがあります。

あなたはセキュリティ上の懸念を持っている場合は、開いている明示的なファイルは安全です:

open my $input, '<', shift or die $!; 
while (<$input>) { 
... 
関連する問題