Schrift
[thread]6491[/thread]

Grosse Dateien öffnen: Ohne TIE::File ?

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Free Faq
 2004-08-12 22:06
#85729 #85729
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Mein Server hat einige TIE Module (Array, hash,...), aber kein TIE::File :-(
Wie kann man dennoch nur Teile einer grossen Datei auslesen?
Also quasi, das ich sage: lese mir Bit $y bis Bit $x ein und speichere es in einer Variable
Haut mich nicht, ich bin ein Noob!
esskar
 2004-08-12 22:25
#85730 #85730
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bit weise wird es schwer... byte weise sollte gehen

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package SeekFile;

use IO::File;
use IO::Seekable;

@ISA = qw(IO::File IO::Seekable);
1;

use Fcntl qw(:seek);

my $startpos = 10;
my $endpos = 20;
my $buffer;

my $fh = SeekFile->new();
if($fh->open("< file"))
{
$fh->seek(SEEK_SET, 0);
$fh->seek(SEEK_SET, $startpos);
$fh->read($buffer, $endpos - $startpos, 0);
$fh->close;
}


in $buffer sollte jetzt alles drin stehen
ptk
 2004-08-12 22:41
#85731 #85731
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei richtig grossen Dateien ist Tie::File sowieso nicht zu empfehlen.
Free Faq
 2004-08-12 22:59
#85732 #85732
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Hmm ok danke. Dein Script tut aber irgendwie nicht richtig.
Wenn ich die Variablen so lasse:
Code: (dl )
1
2
my $startpos = 10;
my $endpos = 20;

gibt es mir 10 Zeichen aus, aber immer von Anfang an.

Da ich nun aber einen Ansatz bekommen habe, hab ich selbst einwenig gesucht und mir folgendes geschrieben, was auch so funktioniert, wie ich es will:
Code: (dl )
1
2
3
4
5
6
open(FILE, "< code.txt");
seek(FILE, 8, 0);
read(FILE, $Ausgabe, 13);
close(FILE);

print $Ausgabe;

Gibt es da irgend ein Nachteil deinem Script gegenüber?
Haut mich nicht, ich bin ein Noob!
esskar
 2004-08-12 23:28
#85733 #85733
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Free Faq,12.08.2004, 20:59]Hmm ok danke. Dein Script tut aber irgendwie nicht richtig.[/quote]
ist klar...
hab auch die argumente vertauscht

Code: (dl )
1
2
$fh->seek(0, SEEK_SET);
$fh->seek($startpos, SEEK_SET);


ansonsten wie immer:
TIMTOWTDI
Strat
 2004-08-12 23:50
#85734 #85734
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=ptk,12.08.2004, 20:41]Bei richtig grossen Dateien ist Tie::File sowieso nicht zu empfehlen.[/quote]
da hatte ich bisher noch keine probleme (allerdings hatte ich da noch keine groesseren als so ca 500MB) ... nur muss man halt ein bisschen aufpassen, dass man damit keine operationen macht, die die komplette datei in den speicher lesen (ich glaube, bei grep, map usw. ist das der fall)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Free Faq
 2004-08-12 23:56
#85735 #85735
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
"There Is More Than One Way To Do It"
Was wär ich nur ohne Google ^^

Die beiden IO Module, sind die einfach nur, damit man es als Objekt behandeln kann?

Was ist der Vorteil von Objekten? *Einwenig vom Thema abweich*
Haut mich nicht, ich bin ein Noob!
Strat
 2004-08-13 00:00
#85736 #85736
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nebenbei: wenn du die Datei zeilenweise bearbeiten willst, dann die datei nicht mit foreach (<FH>) durchackern, sondern besser mit while (<FH>)...

bei blockweisem lesen bleibt wohl nur read(...)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2004-08-13 00:03
#85737 #85737
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Free Faq,12.08.2004, 21:56]Was ist der Vorteil von Objekten? *Einwenig vom Thema abweich*[/quote]
so allgemein gesprochen? Objekte sind ja - grob gesagt - eine Kapselung von Daten und den Methoden, ueber die auf diese Daten zugegriffen wird. Und durch OOP ist es dann nach aussen hin egal, wie die Datenstruktur des Objektes aussieht, sodass die sich bei Bedarf aendern kann, solange sich die Interfaces nach aussen hin gleich verhalten...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2004-08-13 00:17
#85738 #85738
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Nebenbei: wenn du die Datei zeilenweise bearbeiten willst, dann die datei nicht mit foreach (<FH>) durchackern, sondern besser mit while (<FH>)...


Wo liegt da genau der Unterschied?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2004-08-12 22:06.