Struppi: Ausgelesene Zeilen in Perl miteinander vergleichen, WIE?

Beitrag lesen

Hallo liebe Leser,

habe folgendes Problem:
mittels
open(FHin, "< $inFile") or die "\nKann $inFile nicht oeffnen: $!";
open(FHout,">> $outFile" ) or die "\nKann $outFile  nicht zum Anhängen oeffnen: $!";
$/="\n"; # Ende einer Zeichenkette ist der Zeilenumbruch !!

Das ist nicht nötig.

my $z_nr = 0;

Eigentlich auch nicht. Du kannst mit einem push @Array, $wert ein array erweitern.

while(<>){ # Solange Zeile existiert <== ???

while(<FHin>){

$z_nr++;
@zeile[$z_nr] = chomp;

richtig, oder muß @array davor??????

bei array, error: @zeile[$z_nr] better written as $zeile[$z_nr] at # xx.bat line 36.

Da steht doch schon, was du machen sollst.

Jetzt ist die Frage, ob du wirklich die Datei in ein Array einlesen willst, oder hier on the fly die Datei vergleichen.

Im ersten Falle würde das obige zu einem:

chomp(my @zeile = <FHin>);

Das reicht dann auch.
Im zweiten Falle frage ich mich wozu du das Array brauchst, da es gegebenenfalls sehr grossw erden kann.
Daher würde reichen:
my $zeile = chomp(<FHin>);

my $MsgVon = 23;
my $MsgBis = 45;
@Msg[$z_nr]  = substr($zeile[$z_nr], $MsgVon, $MsgBis);

Warum schon wieder ein Array?
Du verwendest nur einen Skalar und kannst dann mit index() die einzelnen Buchstaben benutzen.

for($wert=$z_nr; $wert>=1; $wert--){

Das geht perliger:

for my $wert($z_nr..1)

if ($Msg[$z_nr] == $Msg[$wert]  {
     print FHout "$zeile[$z_nr]\n";     print FHout "$zeile[$wert]\n";
  }
}

Hier erschliesst sich mit nicht der Sinn.
Du vergleichst einen Ausschnitt der Orginal zeile mit einem undefinierten Wert.
arbeitest du nicht mit use strict?
Du soltest unbedingt diese zwei Zeilen am anfang in deinem Programm einbauen und versuchen die Fehlermeldungen zu entfernen:

#!/usr/bin/perl -w
use strict;

Außerdem solltest du dir dringend nochmal die Dokumentationen zu den von dir verwendeten Funktinen durchlesen. es macht mir den Eindruck, dass du gar nicht weisst was diese machen.

Struppi.