Cruz: Warum???

Hallo hilfreiche Tippgeber!

Ich brauche dringend Unterstützung mit einem Script..ich kann den Fehler einfach nicht feststellen.

So sieht der Code aus:

$j=1;  
for ($j==1;$j<=$num;$j++) {  
  
$str[0]="/pfad/";  
$str[1]=$types[$i];  
$str[2]=$j;  
$str[3]=".dat";  

$bemfile = join ("",@str);  
open (BEM, "<$bemfile")  die "could not open $bemfile";  
for (<BEM>) {  
push (@Lines,$\_);  
}  
close (BEM);  
push (@files,$bemfile);  
} # end for j -> num  

$num und @types und $i werden vorher definiert. es ist alles richtig ich hab schon alles eingehend getestet.

Dieses Script soll den Inhalt von sogenannten bem-files (eigendefinition) auslesen. die bemfiles sind durchnummeriert, daher auch die schleife mit dem laufindex. am ende seht ihr einmal push (@files,$bemfile), das ist nur um zu sehen ob die namen der files richtig zusammengesetzt wurden. Ja sie sind definitiv richtig, es steht auch kein linebreak am ende.

Das interessante ist, wenn ich mal probewise bei open(BEM, "<$bemfile") statt $bemfile den vollen pfad und dateinamen angebe, wird sie geöffnet und eingelesen. aber wenn die variable $bemfile da steht krieg ich die Meldung "Document contains no data....blablabla".

Wie kommt das?

Dank und Gruß
Cruz

  1. hi!

    »»  for ($j==1;$j<=$num;$j++) {

    Schau dir am besten nochmal genau die Syntax einer for-Schleife an. Der erste Parameter ist eine Zuweisung, kein Vergleich.

    »»  $str[0]="/pfad/";
    »»  $str[1]=$types[$i];
    »»  $str[2]=$j;
    »»  $str[3]=".dat";
    »»  $bemfile = join ("",@str);

    Wie wäre es damit:
      $bemfile = "/pfad/$types[$i]$j.dat";
    Schonmal was von Variablen-Interpolation gehört?

    »»  for (<BEM>) {
    »»  push (@Lines,$_);
    »»  }

    Äh?
      @lines = <BEM>;

    bye, Frank!

    1. hi!

      »»  for ($j==1;$j<=$num;$j++) {

      Schau dir am besten nochmal genau die Syntax einer for-Schleife an. Der erste Parameter ist eine Zuweisung, kein Vergleich.

      Ja das habe ich auch schon gesehen...aber es funktioniert auch so..probiers mal aus.
      (ich arbeite am NT...Unix ist nicht garantiert)

      Die 2 anderen Tipps waren sehr hilfreich, danke sehr, aber leider ist das Problem nicht gelöst. :( Auch mit Variableninterpolation will das Script nicht funzen wenn ich die Files über die Variable öffne.

      Gruß
      Cruz

      1. hi!

        »»  for ($j==1;$j<=$num;$j++) {
        Schau dir am besten nochmal genau die Syntax einer for-Schleife an. Der erste
        Parameter ist eine Zuweisung, kein Vergleich.
        Ja das habe ich auch schon gesehen...aber es funktioniert auch so..probiers mal aus.

        Das ist reiner Zufall, nichts weiter. Du hattest $j schon vorher deklariert und mit einem Wert initialisiert. Hättest du das weggelassen, würde es nicht mehr funktionieren.

        Tatsächlich initialisiert Perl alle neuen Skalare mit 0 oder "" - übrigens eine Tatsache, die hier bei den meisten anscheinend nicht bekannt ist. Stell dir aber mal vor, du würdest irgendwann C oder C++ (oder auch beliebige andere Sprachen) programmieren, und hättest in deiner Variable dann - je nach Typ - irgendeinen zufälligen Wert stehen...

        bye, Frank!

        1. Tatsächlich initialisiert Perl alle neuen Skalare mit 0 oder "" - übrigens eine Tatsache, die hier bei den meisten anscheinend nicht bekannt ist. Stell dir aber mal vor, du würdest irgendwann C oder C++ (oder auch beliebige andere Sprachen) programmieren, und hättest in deiner Variable dann - je nach Typ - irgendeinen zufälligen Wert stehen...

          Genau deshalb würde ich mich in Perl nie auf so etwas verlassen. Woher weiß ich, wie gut der nächste, der meinen Quelltext bearbeiten muß, Perl kann? Die eine Zeile mehr halte ich aus - aber er die eine Zeile weniger vielleicht nicht.

  2. Das interessante ist, wenn ich mal probewise bei open(BEM, "<$bemfile") statt $bemfile den vollen pfad und dateinamen angebe, wird sie geöffnet und eingelesen. aber wenn die variable $bemfile da steht krieg ich die Meldung "Document contains no data....blablabla".

    Wie kommt das?

    Bist Du im richtigen Verzeichnis, wenn Du das Programm aufrufst?

    Gruss,

    Petra

    1. Bist Du im richtigen Verzeichnis, wenn Du das Programm aufrufst?

      Gruss,

      Petra

      Si senorita, der Pfad ist vom Root angegeben.

      Cruz

  3. So sieht der Code aus:

    »»  $j=1;
    »»  for ($j==1;$j<=$num;$j++) {
    »»  $str[0]="/pfad/";
    »»  $str[1]=$types[$i];
                          ^^^^
    Mir kommt der Wert von $i "etwas" undefiniert vor.