Dateieinlesen simulieren

Dateieinlesen simulieren

am 10.03.2006 13:56:15 von Volker Pohlers

Hallo,

ich stehe vor folgender Aufgabe:

Ich brauche Informationen über den Typ etc. von Oracle-Export-Dateien.
Wenn man diese zeilenweise einliest, kann man die interessanten Werte
leicht entnehmen. Beispiel:


 EXPORT:V09.02.00
UDEMO
RUSERS
8192
0
32
0
 g  ! Do Mär 9
15:35:15 2006pipe_exp_20060309_demo


Nur werden bei uns die Dumps fast immer mit Z-Compress komprimiert. Ein
Dekomprimierung von einigen GByte

Ich brauche nun etwas Perl-Code (unter Windows), der mir on-the-fly
..Z-Dateien - zumindest die ersten paar Hundert Bytes dekomprimiert - und
diese zeilenweise weiterverarbeiten kann.

Ich habe bereits Code gefunden, der den uncompress-Algorithmus in Perl
nachbildet, aber dann habe ich einen String und eben kein Dateihandle
mehr, aus dem ich zeilenweise lesen kann. Ich könnte nun eine temporäre
Datei anlegen und diese neu öffnen, aber Perl kennt doch sicher
elegantere Wege, oder?

mfg
Volker

Re: Dateieinlesen simulieren

am 10.03.2006 14:14:33 von Frank Seitz

Volker Pohlers wrote:

> Ich habe bereits Code gefunden, der den uncompress-Algorithmus in Perl
> nachbildet, aber dann habe ich einen String und eben kein Dateihandle
> mehr, aus dem ich zeilenweise lesen kann. Ich könnte nun eine temporäre
> Datei anlegen und diese neu öffnen, aber Perl kennt doch sicher
> elegantere Wege, oder?

Du könntest das mit einer Pipe realisieren à la:

open F,"zcat $datei |" or die $!;
while ()
{
...
last if $nun_weiss_ich_genug;
}
close F;

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Dateieinlesen simulieren

am 11.03.2006 08:25:03 von hjp-usenet2

Frank Seitz wrote:
> Volker Pohlers wrote:
>> Ich habe bereits Code gefunden, der den uncompress-Algorithmus in Perl
>> nachbildet, aber dann habe ich einen String und eben kein Dateihandle
>> mehr, aus dem ich zeilenweise lesen kann. Ich könnte nun eine temporäre
>> Datei anlegen und diese neu öffnen, aber Perl kennt doch sicher
>> elegantere Wege, oder?
>
> Du könntest das mit einer Pipe realisieren à la:
>
> open F,"zcat $datei |" or die $!;

Wobei ich mir nicht sicher bin, ob das unter Windows das gewünschte tut.
Die Suche nach "gzip" auf CPAN sollte aber auf jeden Fall einige brauchbare
Module zutage fördern, z.B. IO::Zlib, Compress::Zlib oder PerlIO::gzip.

hp

--
_ | Peter J. Holzer | Löschung von at.usenet.schmankerl?
|_|_) | Sysadmin WSR/LUGA |
| | | hjp@hjp.at | Diskussion derzeit in at.usenet.gruppen
__/ | http://www.hjp.at/ |

Re: Dateieinlesen simulieren

am 12.03.2006 19:16:50 von KWittrock

"Volker Pohlers" schrieb im Newsbeitrag
news:4411776f$0$12917$9b4e6d93@newsread4.arcor-online.net...
..> ...
> Ich habe bereits Code gefunden, der den uncompress-Algorithmus in Perl
> nachbildet, aber dann habe ich einen String und eben kein Dateihandle
> mehr, aus dem ich zeilenweise lesen kann. Ich könnte nun eine temporäre
> Datei anlegen und diese neu öffnen, aber Perl kennt doch sicher elegantere
> Wege, oder?
>
Hallo Volker,

das Perl-Kochbuch, Rezept 8.23 "So tun, als wäre ein String eine Datei"
empfiehlt das skalare I/O in Perl 5.8:
open($fh, '<', \$string);
Mit <$fh> liest du die nächste Zeile aus $string. Für Einzelheiten wird auf
open in perlfunc und Kap. 29 des Kamel-Buchs verwiesen (habe dort aber auf
die Schnelle nichts zum Thema gefunden).

Gruß

Klaus