Eckhart: Wieso bei Formularen, aber nicht bei Dateien ??

Ich habe ziemlich erfolgreich das in SELFHTML vorgestellte Beispiel um Formulardaten zu "entschlüsseln" und trennen nach feldern genutzt. Nun wollte ich das gleiche mit einer datei machen mit folgendem inhalt:

,ich.ich.xval.yval,ich.ich.xval.yval

Ich öffne also die datei folgendermassen:

open(DATABASE2, "<DATABASEA.DNB");    
while(<DATABASE2>)
{
  Input = $_ ;
}
close(DATABASE2);

Danach versuche ich den Dateiinhalt, wie bei formulardaten, zuerst nach komma in "felder" zu trennen, und danach in einzelne Werte, mit dem unterschied, dass ich anstatt zwei, vier verschiedene Werte brauche. Ich schreibe also das folgende:

@Datenfelder = split(/,/, $Input);
foreach $Feld (@Datenfelder)  
{
  ($User, $Password, $xvalue, $yvalue) = split(/./, $Feld);
  $Data[$t] = $User;  
  $t = $t + 1;
  $Data[$t] = $Password;  
  $t = $t + 1;
  $Data[$t] = $xvalue;  
  $t = $t + 1;
  $Data[$t] = $yvalue;  
  $t = $t + 1;
}

Aber nach dem aufrufen dieser funktion, ist weder $Data noch ein bestandteil davon (zB. Data[3]) existent. Wieso funktioniert das nicht ?

  1. Hi,

    ($User, $Password, $xvalue, $yvalue) = split(/./, $Feld);

    perldoc perlre beachten! Du trennst gerade an _jedem_ Zeichen, entfernst also den gesamten String und erzeugst ein ziemlich großes Array mit leeren Feldern.

    Richtig wäre split(/./, $Feld).

    Cheatah

    1. perldoc perlre beachten! Du trennst gerade an _jedem_ Zeichen, entfernst also den gesamten String und erzeugst ein ziemlich großes Array mit leeren Feldern.

      Richtig wäre split(/./, $Feld).

      Danke ich werd es probieren. Ich habe mir doch aber genau das Beispiel kopiert (nur zwei weitere felder hinzugefuegt) und nur das "=" mit einem "." ausgetauscht...

      Aber vielleicht hilft es wirklich, den ich habe durch ein paar experimente herausgefunden, dass der Fehler in dies Zeile liegen muss. Wenn es klappt bin ich dir echt dankbar !

    2. Mensch, es scheint zu funktionieren !  Irgendetwas stimmt noch nicht so ganz, aber das kriege ich schon hin. Danke !

  2. Ich habe jetzt die eine stelle Verbessert, aber immer noch tritt etwas merkwürdiges auf:

    ($User, $Password, $xvalue, $yvalue) = split(/./, $Feld);
      $Data[$t] = $User;  
      $t = $t + 1;
      $Data[$t] = $Password;  
      $t = $t + 1;
      $Data[$t] = $xvalue;  
      $t = $t + 1;
      $Data[$t] = $yvalue;  
      $t = $t + 1;

    »»  }

    $Data[1] ist LEER

    erst in $Data[4] und [5] steht der Benutzername und das Password. Und wiederum erst in $DAta[8] und [9] stehen meine zahlen. Wieso das ? Es sollte doch eigentlich bei $Data[1 oder 0] beginnen und kontinuierlich weitergehen ?

    Ich les jetzt noch ein bischen in SELFHTML, aber kann mir jemand das erklären ?

    1. Hallo Eckhart,

      $Data[1] ist LEER

      Das wird an der Datenzeile liegen, die mit einem , beginnt.
        ,ich.ich.xval.yval,ich.ich.xval.yval
      $Datenfelder[0] hat daher auf keinen Inhalt, $t wird trotzdem hochgezählt.

      Du kannst auch ganz auf $t verzichten:
      push(@Data,split(/./, $Feld));

      Viel Spass beim Weitertesten,
      Johannes