Perl-Frage zu Variablennamen ... - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Stephan Hix (106 Beiträge) am Donnerstag, 15.Februar.2001, 19:09.
    Perl-Frage zu Variablennamen ...

      Ich habe folgendes Problem:

      Aus einem Formular kommen Variablen der Art $pos1, $pos2, $pos3 usw.

      Natürlich weiss ich vorher nicht, wieviele Positionen das Formular hat. Nun möchte ich die pos-Variablen in einer Schleife abfragen, so in der Art:

      $x=Anzahl der Datensätze im Formular
      

      while($i++<$x){
      out ($pos.$x); # geht so nicht, weiss ich ;-)
      }
      

      Nun frage ich mich, wie ich in den Variablennamen eine Variable einbaue, die diesen verändert, also an den Stamm "$pos" noch die Nummer anhängt und dann z.B. $pos1 ausgibt.

      Alles klar? Mir nicht - ich habe einen Knoten im Hirn und komm nicht drauf.

      Danke für Eure Hilfe

      Stephan


    Ihre Antwort:

    Name: EMail: EMail bei Antwort? WWW:
    Titel:
    Text:

    Neuer Eintrag


 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Stephan Hix (106 Beiträge) am Donnerstag, 15.Februar.2001, 19:09.
    Perl-Frage zu Variablennamen ...

      Ich habe folgendes Problem:

      Aus einem Formular kommen Variablen der Art $pos1, $pos2, $pos3 usw.

      Natürlich weiss ich vorher nicht, wieviele Positionen das Formular hat. Nun möchte ich die pos-Variablen in einer Schleife abfragen, so in der Art:

      $x=Anzahl der Datensätze im Formular
      

      while($i++<$x){
      out ($pos.$x); # geht so nicht, weiss ich ;-)
      }
      

      Nun frage ich mich, wie ich in den Variablennamen eine Variable einbaue, die diesen verändert, also an den Stamm "$pos" noch die Nummer anhängt und dann z.B. $pos1 ausgibt.

      Alles klar? Mir nicht - ich habe einen Knoten im Hirn und komm nicht drauf.

      Danke für Eure Hilfe

      Stephan

     Antworten

    Beitrag von Andreas (396 Beiträge) am Freitag, 16.Februar.2001, 09:52.
    knifflig [war: Perl-Frage zu Variablennamen ...]

      Hallo,

      eine direkte Lösung kenne ich auch nicht.
      Wie sieht denn das Formular aus?
      Wäre es vielleicht möglich, die Formulareinträge nicht in verschiedene Variablen zu schreiben, sondern sonderzeichengetrennt in eine einzige? Dann könnte man mit @split einen array erzeugen, der dann wiederum wunderbar über eine while-Schleife abarbeitbar wäre...

      Gruß, Andreas

     Antworten

    Beitrag von Stephan Hix (106 Beiträge) am Freitag, 16.Februar.2001, 10:30.
    Ne Nacht drüber geschlafen und ...

      ...gerade ist mir die Lösung eingefallen:

      $pos5="Inhalt";
      $i=5;
      $variable=("\$pos".$i);
      $variable=~s/(\$\w+)/$1/gee;
      out $variable."\n";
      

      An Andreas: Würde mich aber doch auch mal interessieren, ob man mehrere Werte mit Komma getrennt in eine Variable schreiben kann. Wie machst Du das?

      name="variable.=','" value=

      Naja, werde ich bei Gelegenheit mal testen ... Danke jedenfalls für die Idee - könnte nützlich sein.


      Gruß
      Stephan

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 16.Februar.2001, 11:11.
    Re: Perl-Frage zu Variablennamen ... - doch, geht so wie Du es dachtest ;-)

      Witzigerweise stellt Perl etwas bereit, mit dem man sich Variablennamen konstruieren kann (kenn kaum andere Programmiersprachen die das können, vermutlich weil es letztendlich ein etwas unsauberer Weg ist, sich vor nem Array zu drücken), also was Du geschrieben hast ist schon fast richtig, Du musst Perl nur noch klarmachen, dass Du den VariablenNAMEN gesamt meinst und nicht die Inhalte der jeweiligen Variablen... Also Deine Schleife sieht richtig so aus:

      while($i++<$x)
      {
        out ${$pos.$x};
      }
      

      Innerhalb des ${...} kann stehen was mag, Perl evaluiert den Ausdruck und das was rauskommt ergibt den Variablennamen...

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 16.Februar.2001, 11:14.
    Re: doch, geht so wie Du es dachtest ;-) $i statt $x

      Muss natürlich $i in der Schleife heissen statt $x, aber das hab ich so von Dir übernommen ;-)

      while($i++<$x) { out ${$pos.$i}; }
      

     Antworten

    Beitrag von Stephan Hix (106 Beiträge) am Freitag, 16.Februar.2001, 13:11.
    $i statt $x -> War mir auch schon aufgefallen ...

      ... aber da stand es schon drin im Forum.

      Danke jedenfalls für die elgantere Lösung. Um ein "Array rumdrücken" wollte ich mich ja garnicht. Aber ich habe leider keine Ahnung wie ich das aus meinem Formular direkt erzeugen soll.

      Der Name des Formularfeldes wird halt in einer Schleife mit Zähler ($i) generiert.
      Kann ich denn als Alternative dazu in der Definition des Formularfeldes sowas wie

      name="arrayname[$i]="

      schreiben und bekomme am "anderen Ende" ein Array raus?
      Bei meinen Versuchen hatte das nicht geklappt, aber das heißt ja nicht viel ;-)

      Gruß
      Stephan

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 20.Februar.2001, 13:25.
    Re: $i statt $x -> War mir auch schon aufgefallen ...

      Wenn ich alles richtig verstanden habe, wäre folgender Weg vielleicht am "saubersten" ;-) (Ich hab ja auch nix gegen das Erzeugen von Variablennamen on-the-fly, es gibt aber Leute die das eben als unsauber abtun):

      Du erzeugst Dein Formular mit sowas wie:

      for($i=0; $i<10; $i++) {  out "<input name=\"eintrag_$i\">"; }
      

      Und erzeugst "am anderen" Ende ein Array dann so:

      for($i=0; $i<10; $i++) { $array[$i]=$_get{"eintrag_$i"}; }
      

      Das isses - und im Prinzip ist da kein grosser Unterschied zu der vorigen Lösung... ;-)

     Antworten

    Beitrag von Andreas (396 Beiträge) am Freitag, 16.März.2001, 00:13.
    Re: $i statt $x -> War mir auch schon aufgefallen ...

      Ich habe ein vergleichbares Problem wie Stefan Hix.

      Die Geschichte geht eben nicht genau so, wie die erste Lösung von Christoph, denn da ist ein $ zu viel!!!
      Beim Lesen habe ich mich schon gewundert, aber es meiner Unwissenheit zugeschoben.

      Beim Ausprobieren hat es antürlich nicht funktioniert.

      Richtig müßte es heißen (und das geht auch!):

      <perl>
      while($i++<$x)
      {
      out ${pos.$i};
      }
      </perl> 
      

      Perl wertet den Ausdruck zwischen den gescheiften Klammern aus, setzt das $ dafor und interpretiert es als Variable.

      Herzliche Grüße von Andreas Jurenda :-})

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 16.März.2001, 00:27.
    Re: $i statt $x -> War mir auch schon aufgefallen ...

      Hast recht, und ums jetzt abschliessend noch ganz sauber hinzuschreiben (uff, hoffentlich stimmt diesmal alles ;-) ), sollte man noch "" verwenden:

      <perl>
      while($i++<$x)
      {
      out ${"pos$i"};
      }
      </perl>
      

     Antworten


     
 Liste der ersten 150 Einträge:Einklappen Zur Eingabe 
 Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.50s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!