Chris Weber: Problem mit der "join"-Funktion

Hallo,

ich habe derzeit ein Problem mit der eigentlich wunderbaren Funktion "join".  Folgendes Beispiel funktionniert einwandfrei:

----------cut----------

@liste = ("Dies", "ist", "ein", "test");
$ergebnis = join ' ', @liste;
print $ergebnis;

----------cut----------

Dieses Beispiel funktionniert fabelhaft und die Ausgabe auf der Kommandozeile ist:  Dies ist ein test

Wenn ich jedoch versuche das gleiche mit einer .txt-Datei zu machen wobei der Inhalt der Datei im Array @liste gespeichert wird, stosse ich auf das Problem, dass wenn ich nur eine Zeile in die Datei geschrieben habe, die Woerter in dieser Zeile ohne das ' ' dazwischen ausgegeben werden.  Wie kann ich das hinbekommen.

Wenn ich die Woerter in der Datei untereinander, d.h. jedes in eine eigene Zeile schreibe, erscheint folgendes Ergebnis:

Dies
ist
ein
test

Wie kann ich es machen, dass die Woerter nebeneinander stehen ?

Der Quelltext sieht wie folgend aus:

----------cut----------

open(IN, "<test.txt");
@liste = <IN>;
close(IN);

$ergebnis = join ' ', @liste;
print $ergebnis;

----------cut----------

Danke

Chris Weber

  1. So wie das für mich ausschaut, reagiert das join irgendwie auf das Zeilende! Jedesmal wenn ein "Return" vorhanden ist, fügt join das Zeichen ein...

    Also müsstest Du die Textdatei bzw, das Trennzeichen zwischen den Wörtern ändern, damits klappt. Ein Leerzeichen scheint nicht den gewünschten Effekt mit join zu bringen.

    cheers
    kaepten

  2. ----------cut----------

    open(IN, "<test.txt");
    @liste = <IN>;
    close(IN);

    $ergebnis = join ' ', @liste;
    print $ergebnis;

    ----------cut----------

    Hallo Chris, hallo kaepten, stimmt: die Zeilenumbrüche müssen raus. Und das geht so:
    ---
    open (IN, "<test.txt");
    while(<IN>){
    chomp ($_);
    push (@zeilen, $_);
    }
    ---

    Viele Grüße, Rolf

  3. hi!

    Wenn ich die Woerter in der Datei untereinander, d.h. jedes in eine eigene Zeile schreibe,
    erscheint folgendes Ergebnis:

    [...]

    Wie kann ich es machen, dass die Woerter nebeneinander stehen ?

    Du musst die Zeilenvorschübe am Ende jeder Zeile in der Textdatei löschen.

    open(IN, "<test.txt");
    @liste = <IN>;
    close(IN);

    $ergebnis = join ' ', @liste;
    print $ergebnis;

    open IN, "<test.txt";
    for (<IN>)
    {
      chomp;
      push @liste, $_;
    }
    close IN;
    $ergebnis = join ' ', @liste;

    bye, Frank!