Matthias: Probleme mit filesize > 1 GB???

Beitrag lesen

Mea culpa.,

da beschäftigen sich die Spezialisten tagelang mit einer Perl-Sequenz und ich merke erst jetzt, dass 25 gleichzeitige Projekte einfach zu viel sind. Denn ich habe das falsche Skript gepostet. Das gepostete erste läuft jetzt dank Andreas et. all Tipps wie am Schnürchen, Bauchschmerzen bereitet mir aber dieses :

#!/opt/perl/bin/perl -w
use strict;
while (<STDIN>){
  print STDERR tell(STDIN);
  $_ =~ s/\x5B\x50\x5B\xff\x02/\x0A/g ;
  $_ =~ s/\x5B\x50\x5B\xff\x03/\x0D/g ;
  $_ =~ s/\x5B\x50\x5B\xff\x04/\x20/g ;
  $_ =~ s/\x5B\x50\x5B\xff\x05/\x19/g ;
  $_ =~ s/\x5B\x50\x5B\xff\x01/\x00/g ;
  $_ =~ s/\x5B\x50\x5B//g;
  print $_;
}

In der Hoffnung Gnade zu finden, habe ich mir ein paar Gedanken und Fingerübungen gemacht. Das erwähnte erste Skript erzeugt eine 1,2 GB große Ausgabedatei quasi ohne Punkt und Komma – sprich Zeilenumbrüche. Nun kommt dieses Monster auf das zweite (obige) Perlscript zu. Wenn ich vor der ersten Ersetzungszeile‚ tell(STDIN) absetze, erhalte ich den Wert -1. Ich habe auch probiert, den Output des ersten Scripts in eine Datei zu schaufeln und diese dann per

cat datei | perl.script

zu verarbeiten, was zum gleichen Fehler führt.

Das Script in der Form

1  #!/opt/perl/bin/perl -w
     2  use strict;
     3  my $Datei = "exf.del";
     4  open(DATEI, "<$Datei") || die "$Datei: $!";
     5  #while (<STDIN>){
     6  while (<DATEI>){
     7    print STDERR "So Weit\n";
     8    print STDERR tell(DATEI)."\n";
     9    $_ =~ s/\x5B\x50\x5B\xff\x02/\x0A/g ;
    10    $_ =~ s/\x5B\x50\x5B\xff\x03/\x0D/g ;
    11    $_ =~ s/\x5B\x50\x5B\xff\x04/\x20/g ;
    12    $_ =~ s/\x5B\x50\x5B\xff\x05/\x19/g ;
….

ergibt:

So Weit
1205690315
Substitution loop at confpl.sh line 9, <DATEI> line 1.

und scheint das Dateiende nicht zu erkennen.

Sorry

Matthias

Wen’s interessiert was das Ganze soll: es geht darum, von SQL*Plus erzeugten EBCDIC-Code durch’s System zu schleusen und dabei den unterschiedlichen Codierung der White Spaces / Ziffern gerecht zu werden und binär codierte Längenangaben zu erhalten. Hierbei wurde immer das Muster '\x5B\x50\x5B\xff' vor zu substitutionierende "Zeichen" gesetzt.