Die Fähigkeit, eine Textdatei in ein String-Array hinein und aus diesem heraus zu lesen (und zu schreiben), ist meines Erachtens eine recht häufige Anforderung. Dies ist auch sehr nützlich, wenn Sie mit einer Sprache beginnen, bei der zunächst kein Zugriff auf eine Datenbank erforderlich ist. Existiert man in Golang?
z.B
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
und
func WriteLines(saBuff[]string, sFilename string) (bool) {
Ich würde es vorziehen, eine vorhandene zu verwenden, anstatt sie zu duplizieren.
Antworten:
Ab Go1.1 gibt es eine bufio.Scanner- API, mit der Zeilen aus einer Datei problemlos gelesen werden können. Betrachten Sie das folgende Beispiel von oben, das mit dem Scanner neu geschrieben wurde:
quelle
Wenn die Datei nicht zu groß ist, kann dies mit der getan werden ,
ioutil.ReadFile
undstrings.Split
Funktionen wie folgt:Sie können die Dokumentation zu ioutil- und Strings- Paketen lesen .
quelle
"io/ioutil"
\r
. Sie können also\r
an jedes Element ein angehängt haben .Erste Antwort kann nicht aktualisiert werden.
Wie auch immer, nach der Veröffentlichung von Go1 gibt es einige wichtige Änderungen, daher habe ich wie folgt aktualisiert:
quelle
Sie können dafür os.File (das die io.Reader- Schnittstelle implementiert ) mit dem bufio- Paket verwenden. Diese Pakete werden jedoch unter Berücksichtigung der festen Speichernutzung erstellt (egal wie groß die Datei ist) und sind recht schnell.
Leider macht das Einlesen der gesamten Datei in den Speicher etwas komplizierter. Sie können einen Bytes.Buffer verwenden , um die Teile der Zeile zu verbinden, wenn sie das Zeilenlimit überschreiten. Auf jeden Fall empfehle ich Ihnen, den Zeilenleser direkt in Ihrem Projekt zu verwenden (insbesondere, wenn Sie nicht wissen, wie groß die Textdatei ist!). Wenn die Datei jedoch klein ist, kann das folgende Beispiel für Sie ausreichend sein:
Eine andere Alternative könnte darin bestehen, io.ioutil.ReadAll zu verwenden, um die vollständige Datei sofort einzulesen und anschließend das zeilenweise Schneiden durchzuführen . Ich gebe Ihnen kein explizites Beispiel dafür, wie Sie die Zeilen zurück in die Datei schreiben, aber im Grunde
os.Create()
folgt eine Schleife ähnlich der im Beispiel (siehemain()
).quelle
gob.Encode()
dafür verwenden. Das Ergebnis ist eine Binärdatei anstelle einer durch Zeilenumbrüche getrennten Textdatei. Diese Datei kann alle Arten von Daten enthalten, kann effizient analysiert werden, die resultierende Datei wird kleiner und Sie müssen sich nicht mit diesen Zeilenumbrüchen und der dynamischen Zuordnung befassen. Daher ist es wahrscheinlich besser für Sie geeignet, wenn Sie nur etwas für die spätere Verwendung mit Go beibehalten möchten.oder
quelle