roman lenz: string zusammen bauen

hi hi

ich habe 2 array und möchte daraus einen string machen. zwischen den strings soll ein leerzeichen sein und nach dem zweiten sting noche ich einen zeilenumbruch einfügen (\n)

$achse = @xachse;
@yachse;
 for ($i = 0; $i < $xachse; $i++) {
      push(@wert,$xachse[$i],'',$yachse[$i],'\n');
    }
    $wert = join('',@wert);

leider bekomme ich den zeilenumbruch nicht hin :-( ??
kann ich das push und das join zusammen fassen?

besten dank roman

  1. Prost!

    ich habe 2 array und möchte daraus einen string machen. zwischen den strings soll ein leerzeichen sein und nach dem zweiten sting noche ich einen zeilenumbruch einfügen (\n)
    $achse = @xachse;
    @yachse;
    for ($i = 0; $i < $xachse; $i++) {

    ^ soll das hier vielleicht $achse heißen?

    push(@wert,$xachse[$i],'',$yachse[$i],'\n');

    Besser wäre push(@wert,'$xachse[$i] $yachse[$i]\n');

    $wert = join('',@wert);

    Wofür brauchst du das join()?

    mfg Torsten

    --
    A beer is like an asshole: everybody should have one.
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
    1. push(@wert,$xachse[$i],'',$yachse[$i],'\n');

      Besser wäre push(@wert,'$xachse[$i] $yachse[$i]\n');

      klappt leider nicht :-((

      $wert = join('',@wert);

      Wofür brauchst du das join()?

      ich möchte die werte in einer textarea wieder ausgeben

      mfg Torsten

      1. Guten Morgen,

        Besser wäre push(@wert,'$xachse[$i] $yachse[$i]\n');
        klappt leider nicht :-((

        Versuch es mal unter Beachtung des Hinweises von Klaus, also mit " statt '.

        mfg Torsten

        1. Guten Morgen,

          Besser wäre push(@wert,'$xachse[$i] $yachse[$i]\n');
          klappt leider nicht :-((

          Versuch es mal unter Beachtung des Hinweises von Klaus, also mit " statt '.

          mfg Torsten

          hi hi

          jeep jetzt klappt es :-)

          for ($i = 0; $i < $xachse; $i++) {
                $wert.="$xachse[$i] $yachse[$i]\n";
              }

          leider bekomme ich noch folgende Ausgabe:

          0 0

          1 1

          2 2

          3 6

          4 7

          8 8

          was ich will ist aber folgendes

          0 0
          1 1
          2 2
          3 6
          4 7
          8 8

          könnt ihr mir dabei auch noch helfen

          besten dank roman

          1. Hallo,

            leider bekomme ich noch folgende Ausgabe:

            0 0

            1 1

            was ich will ist aber folgendes

            0 0
            1 1
            könnt ihr mir dabei auch noch helfen

            Dazu müßte man wissen, wie die Daten in den Array @xachse bzw @yachse generiert werden. Ich vermute, daß es durch einlesen aus einer Datei passiert, wobei die EInleseroutine nicht berücksichtigt, daß auch das \n aus der Datei eingelesen wird. ein chomp an der richtigen Stelle wirkt da oft Wunder;-)

            Grüße
              Klaus

            1. Hallo Klaus

              erstmal danke das du mir hilfst
              hier ist mal ein schnipsel aus meinem script.
              ...
              elsif (param('yachse')&&param('xachse')) {
                  $file = $cgi->param("yachse");
                  read ($file,$yachse,5000000);
                  chomp $yachse;
                  @yachse = split(/\s/,$yachse);
                  $yachse = @yachse;
                  $file = $cgi->param("xachse");
                  read ($file,$xachse,5000000);
                  chomp $xachse;
                  @xachse = split(/\s/,$xachse);
                  $xachse = @xachse;
                  if($yachse != $xachse) {$meld = "Unterschiedliche Anzahl von X- und Y-Werten", &kill($meld)};
                  for ($i = 0; $i < $xachse; $i++) {
                    $wert.="$xachse[$i] $yachse[$i]\n";
                  }
                }
              ...

              die Ausgabe mache ich so:

              ...
                      <div align="center">Eingabe der Wertepaare<br>
                        <textarea name="puls" rows="11" cols="40">
              HTML
                           print $wert;
              print <<HTML;
              </textarea>
                      </div>
              ...

              ich sitze hier und verzweifele ein bisschen

              besten dank roman

              P.s. hast du einen guten link zum Thema "doublequotet und einfache quotet"

              1. Hallo,

                elsif (param('yachse')&&param('xachse')) {
                    $file = $cgi->param("yachse");
                    read ($file,$yachse,5000000);
                    chomp $yachse;
                    @yachse = split(/\s/,$yachse);
                    $yachse = @yachse;

                ....

                }

                Das ist etwas unüblich, kann aber, entsprechende Umstände vorausgesetzt, funktionieren.
                Es sieht, entsprechend Deinem Vorposting, so aus, als ob da irgendwie doch Zeilenumbrüche in die Datei gekommen sind, die dann in der Ausgabe wieder aufscheinen. Überprüfe einmal, was in den Arrays wirklich drin steht.
                Das geht recht gut mit einem Begrenzungszeichen:
                    for ($i = 0; $i < $xachse; $i++) {
                      $wert.="Eintrag $i: #$xachse[$i]# #$yachse[$i]#\n";

                Wenn es Einträge ohne Werte gibt, dann passt Dein split() nicht. (Was ich jetzt für am wahrscheinlichsten halte)
                Beispiel:
                Eintrag 1: #1# #1#
                Eintrag 2: ## ##
                Eintrag 3: #2# #4#
                ....

                Wenn es eine Zeilenumbruch zwischen dem Wert und dem nachfolgenden # gibt, dann ist was bei dem Inhalt für die yachse faul.
                Beispiel:
                Eintrag 1: #1# #1

                Eintrag 2: #2# #4

                P.s. hast du einen guten link zum Thema "doublequotet und einfache quotet"

                http://selfhtml.teamone.de/cgiperl/sprache/zeichenketten.htm#regeln z.B.
                Aber auch in der Perldokumentation selbst gibt's natürlich näheres:

                Günstigerweise per Commandline mit 'perldoc perlop'.

                Im Notfall auch per http://www.perldoc.com/perl5.8.0/pod/perlop.html#Quote-and-Quote-like-Operators.

                Grüße
                  Klaus

  2. Hallo,

    @yachse;

    was ist das denn?

    for ($i = 0; $i < $xachse; $i++) {

    $xachse ist in Deinem Code nicht definiert, aber auch nicht nötig wenn Du stattdessen
    for ($i = 0; $i < scalar @xachse; $i++) {

    verwendest.

    push(@wert,$xachse[$i],'',$yachse[$i],'\n');
    leider bekomme ich den zeilenumbruch nicht hin :-( ??

    Dir ist der Unterschied zwischen interpolierten (doublequotet) und nicht-interpolierten (singlequotet) Strings bekannt? Im speziellen solltest Du einmal ausprobieren welche Ausgabe durch
    print '\n';
    bzw.
    print "\n";

    erzeugt wird.

    kann ich das push und das join zusammen fassen?

    Du könntest beispielsweise alles gleich in eine einfache Variable schreiben, ganz ohne Zwischenarray. Ein Tipp: .= kann oft wirklich tolle Dienste leisten.

    Eine direkte Ausgabe ist natürlich auch möglich, dann brauchst Du überhaupt keine zusätzliche Variable, was natürlich extrem ressourcenschonend wäre.

    Grüße
      Klaus