Halihallo Sergej
habe folgendes Problem:
mittels
open(FHin, "< $inFile") or die "\nKann $inFile nicht oeffnen: $!";
lese ich den Testfile ein, kein Problem.
Dateihandles sollten GROSS geschrieben. Kleine Stilkritik.
$/="\n"; # Ende einer Zeichenkette ist der Zeilenumbruch !!
brauchst du nicht.
while(<>){ # Solange Zeile existiert <== ???
Eine Zeile von was? - Verwende besser den Dateihandle:
while( <FHin> )... und ja, solange noch Zeilen einzulsesen sind, tue dis, tue das...
@zeile[$z_nr] = chomp;
Dann enthält @zeile[$z_nr] immer das gelöschte Zeichen, sprich die Newline.
chomp;
$zeile[$z_nr] = $_;
Ein Element eines Arrays ist und bleibt ein Skalar => $ statt @. Mit @zeile[...] erhälst
du einen splice (Teilbereich) des Arrays, das willst du hier aber nicht.
perldoc perldata
richtig, oder muß @array davor??????
@array davor? - Was meinst du damit. Dennoch ein nein vorab.
bei array, error: @zeile[$z_nr] better written as $zeile[$z_nr] at # xx.bat line 36.
Tja, ein Splice über einen Index ist das Element per se, aber auf die Elemente eines
Arrays sollte besser mit
$array[$index]
zugegriffen werden.
my $MsgVon = 23;
my $MsgBis = 45;
@Msg[$z_nr] = substr($zeile[$z_nr], $MsgVon, $MsgBis);
$Msg[$z_nr]...
for($wert=$z_nr; $wert>=1; $wert--){
if ($Msg[$z_nr] == $Msg[$wert] {
^^
eq statt ==, denn == ist für den Vergleich zweier Zahlen. eq ist das Äquivalent für
Strings.
Wenn du jede Zeile mit jeder vergleichen willst, wirst du zwei for-Schleifen benötigen.
for ( my $i=0; $i < @Msg; $i++ ) {
for ( my $j=0; $j < @Msg; $j++ ) {
next if ( $i == $j ); # sonst wird jeder Eintrag ausgegeben, da jeder mit sich
# selber verglichen true ist.
if ($Msg[$i] eq $Msg[$j]) {
print FHout $Msg[$i]."\n";
}
}
}
Viele Grüsse
Philipp