ファイルサイズが非常に大きい場合、perlでファイルを開くには時間がかかります。ファイルの最初/最後の10行しか必要としない場合は、メモリ内のファイル全体を解析し、それらの行を取得することが最適な解決策ではないはずです。 私はこの目的のためにqx {head filename}を使うことができます。 CPANのような他の方法はありますか?最初の10行をファイルから開かずに(perlで)取得する最善の方法は何ですか?
-4
A
答えて
1
これを試してください。 <$fh>
ファイルの次の行を返します。だから、ループで反復する。このように、あなたがファイルを開く必要が
my @ar;
open my $handler,'<',"split.py" or die $!;
push @ar, scalar <$handler> for 1 .. 2;
print @ar;
4
に従い、リミットまで行ずつそれを読むよう
open my $fh,'<',"file" or die $!;
print scalar <$fh> for 1 .. 10;
あなたは、変数試しに出力を保存したい:
use strict;
use warnings;
my $count = 1;
open my $fh, '<', 'huge_filename' or die $!;
while(<$fh>) {
print; # Or push into array for further processing
last if ++$count == 10;
}
close $fh;
+0
$ countの代わりに$を使うこともできます。既にあなたのための行番号を持っていました。 – senorsmile
2
ファイルを開くことなくファイルからデータを取得することはできません。また、ファイルを開く時間もファイルサイズに依存しません。
あなただけの最初の10行が必要な場合は、あなたがそれを開く必要があり、10行を読んで、近い:
my @lines;
open my $fh, '<', $file_name;
for (1..10) {
my $line = <$fh>;
chomp $line; # optional, remove "\n" from end of line
push @lines, $line;
}
close $fh;
0
が
他の方法ですそれだけで読むために十分に簡単ですメモリへの最初の10行:
use strict;
use warnings;
use 5.020;
use autodie;
use Data::Dumper;
open my $OUTFILE, '>', 'data.txt';
for my $i (1..100_000) {
say {$OUTFILE} "hello word $i";
}
close $OUTFILE;
open my $INFILE, '<', 'data.txt';
while (my $line = <$INFILE>) {
print $line;
last if $. >= 10;
}
close $INFILE;
--output:--
hello word 1
hello word 2
hello word 3
hello word 4
hello word 5
hello word 6
hello word 7
hello word 8
hello word 9
hello word 10
これはどんなCPANも好きですか?メモリにのみ最後の10行を読み取るための
:
use File::ReadBackwards;
open my $INFILE, '<', 'data.txt';
my $backwards_file = File::ReadBackwards->new('data.txt');
my $i = 1;
while (my $line = $backwards_file->readline) {
print $line;
last if ++$i > 10;
}
close $INFILE;
--output:--
hello word 100000
hello word 99999
hello word 99998
hello word 99997
hello word 99996
hello word 99995
hello word 99994
hello word 99993
hello word 99992
hello word 99991
関連する問題
- 1. GUIDの最初の4バイトからInt32を取得する最善の方法は何ですか?
- 2. アンドロイドアプリリンクからIDを取得する最善の方法は何ですか?
- 3. Scalaのファイルから最初の行を取得する方法
- 4. VCLファイルをデバッグする最善の方法は何ですか?
- 5. サブスクライバシステムを実行する最善の方法は何ですか?
- 6. InstallScriptからWiX Toolsetに移行する最善の方法は何ですか?
- 7. Java/C#からC++に移行する最善の方法は何ですか?
- 8. アンドロイドの外部ファイルからテキストデータを取得する最善の方法は何ですか?
- 9. strings.xmlでアタチュルート値を取得する最善の方法は何ですか?
- 10. DataViewから最初の10レコードを取得するには?
- 11. タイムスタンプのDateオブジェクトを取得する最善の方法は何ですか?1224642020?
- 12. JavaからExcelファイルを書く最善の方法は何ですか?
- 13. Microsoftのスタックからオープンソースの動的Webサイト開発に移行する最善の方法は何ですか?
- 14. ネイティブC++クラスのインスタンスからC++/CX refクラスにコールバックを取得する最善の方法は何ですか?
- 15. リスナーから情報を取得し、それをゲームエンジンに取り込む最善の方法は何ですか?
- 16. キーでPHPで何かをハッシュする最善の方法は何ですか?
- 17. WCFで認証する最善の方法は何ですか?
- 18. C++でキャストする最善の方法は何ですか?
- 19. Androidのhtmlファイルからコンテンツを取得する最善の方法
- 20. データフレームのサブセットで行を操作する最善の方法は何ですか?
- 21. ビューモデルを構築する最善の方法は何ですか?
- 22. NSMutableArrayをシャッフルする最善の方法は何ですか?
- 23. オブジェクトを解決する最善の方法は何ですか?
- 24. データフレームを回避する最善の方法は何ですか?
- 25. ナイトモードをサポートする最善の方法は何ですか?
- 26. リクエストライブラリからJSONレスポンスを解析する最善の方法は何ですか?
- 27. perl配列から複数の値を取得する最良の方法は何ですか?
- 28. 最初の行から現在の行への最大値の取得方法
- 29. DataAdapterのDateTimeフィールドから日付を取得する最善の方法です。
- 30. ファイルを開かずに最初のN行を読む(Python)
「開かない」正気の要件ではありません。一度にすべてをメモリに読み込まないことは、おそらくあなたが望み、必要とするものです。 – tripleee
また、基準を指定しない "最高"は、意見を出し合った議論を招きます。あなたが必要としていること、理由、あるいは「十分に良い方法」のために解決することを教えてください。 – tripleee
可能な複製http://stackoverflow.com/questions/303053/how-can-i-read-lines-from-the-end-of-file-in-perl - あなたがいったんあなたがそれを持っています。 – tripleee