Zeilen von stdin bis zu bestimmten Zeichen lesen

8

Ich lerne Go.

Mein Programm sollte Daten von stdin lesen, bis ich eine Zeile mit einer einzigen Periode eintrage.

%Vor%

Wie sollte ich meine for-Schleife ändern, um das Programm zu stoppen, wenn ich einen einzelnen Punkt eingebe?

Ich habe versucht, eine while-Schleife mit der for-Anweisung zu implementieren, stimmt etwas nicht mit meiner Vorgehensweise, ist die Bedingung falsch oder verwirft ReadString meine Daten?

    
astropanic 07.01.2013, 22:37
quelle

4 Antworten

10
  

... ist ReadString mit meinen Daten unordentlich?

Nein, ist es nicht. Es liest bis zum nächsten '\n' . Das bedeutet, dass eine Zeile mit nur einem Punkt die Daten ".\n" oder ".\r\n" abhängig vom Betriebssystem hat.

Um Zeilenenden zu entfernen, würde ich input = strings.TrimRight(input, "\r\n")

machen     
Stephen Weinberg 07.01.2013, 22:57
quelle
13

Nur für den Fall, dass irgendjemand anderem diese Frage stellt:

Seit Go 1.1 gibt es eine viel schönere Möglichkeit, die Zeilen einiger verfügbarer Eingaben zu durchlaufen. So würde ich heute das Problem von OP angehen:

%Vor%

scanner.Text() entfernt automatisch den abschließenden Zeilenumbruch.

    
sjakobi 18.06.2014 22:58
quelle
0

Habe gerade bemerkt, dass die Frage innerhalb des Themas nicht die gleiche wie im Titel ist. Der Fehler mit dem ursprünglichen Beispiel ist mit Eingabevariable wurde innerhalb der Schleife deklariert. Deshalb kommt Ihre Bedingungsprüfung nie zum Ausgangspunkt.

    
smile-on 22.09.2015 20:32
quelle
-1

Das wichtigste Problem bei Verwendung einer beliebigen bufio-Hilfsfunktion besteht darin, dass es möglicherweise mehr Daten über das Stoppzeichen '\n' hinaus liest. Es liest alle verfügbaren Eingaben bis zur Größe des Puffers. Im Falle eines gleichzeitigen Zugriffs auf os.Stdin kann der nächste Leser einige Eingaben übersehen, die zuvor von bufio gelesen wurden. Unten ist mein nicht gepufferter "Entwurf" -Code, um eine gleichzeitig sichere Methode zum Lesen aller Zeichen aus dem Eingabestrom bis zu CR ('\n') char. Zu skizzieren.

%Vor%     
smile-on 21.09.2015 15:58
quelle

Tags und Links