在Go中執行readline字符串的習慣用法是什麼?標準庫中提供的原始函數看起來非常低,它們返回字節數組。有沒有更容易的方式從readline函數中獲取字符串?go readline - >字符串
8
A
回答
10
以下是一些使用bufio.ReadLine和bufio.ReadString的示例。
package main
import (
"bufio"
"fmt"
"os"
)
func ReadLine(filename string) {
f, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReaderSize(f, 4*1024)
line, isPrefix, err := r.ReadLine()
for err == nil && !isPrefix {
s := string(line)
fmt.Println(s)
line, isPrefix, err = r.ReadLine()
}
if isPrefix {
fmt.Println("buffer size to small")
return
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func ReadString(filename string) {
f, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReader(f)
line, err := r.ReadString('\n')
for err == nil {
fmt.Print(line)
line, err = r.ReadString('\n')
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func main() {
filename := `testfile`
ReadLine(filename)
ReadString(filename)
}
11
我寫了一種方法來輕鬆讀取文件中的每一行。 Readln(* bufio.Reader)函數從底層bufio.Reader結構中返回一行(sans \ n)。
// Readln returns a single line (without the ending \n)
// from the input buffered reader.
// An error is returned iff there is an error with the
// buffered reader.
func Readln(r *bufio.Reader) (string, error) {
var (isPrefix bool = true
err error = nil
line, ln []byte
)
for isPrefix && err == nil {
line, isPrefix, err = r.ReadLine()
ln = append(ln, line...)
}
return string(ln),err
}
您可以使用Readln從文件中讀取每一行。以下代碼讀取文件中的每一行並將每行輸出到stdout。
f, err := os.Open(fi)
if err != nil {
fmt.Println("error opening file= ",err)
os.Exit(1)
}
r := bufio.NewReader(f)
s, e := Readln(r)
for e == nil {
fmt.Println(s)
s,e = Readln(r)
}
乾杯!
+4
這是偉大的,但使用append是非常糟糕的。如果將該行切換爲複製(ln,line),則該函數的運行速度將提高約20倍。這對我來說是必須的,因爲我解析了很多GB的文件。 – mschuett 2015-05-05 05:45:33
+2
@mschuett你能分享修改過的代碼嗎? – 2016-10-04 17:33:20
相關問題
- 1. Go中的解釋字符串文字
- 2. 在Go中的字符串列表中拆分字符串
- 3. Go模板中的切片字符串
- 4. 如何從一個字符串在Go
- 5. 在Go中迭代多行字符串
- 6. 字符串到大詮釋在Go?
- 7. 字符串重載運算符「>>」
- 8. C#:字典的轉換<字符串,字符串>到詞典<字符串,字典<字符串,字符串>>
- 9. Java的轉換{字符串,字符串} []地圖<字符串,字符串[]>
- 10. 排序列表<keyValuePair <字符串,字符串>>
- 11. 獲得指數<HashMap的<字符串,字符串>>
- 12. 如何將字典<字符串,對象>轉換爲字典<字符串,字典<字符串,字符串>>>
- 13. XML - > DOM - >修改 - >字符串
- 14. 如何在Go中爲字符串分配新的字符?
- 15. 安卓插入多個單項成的ArrayList <HashMap的<字符串,字符串>>從的HashMap <String,字符串>
- 16. 蒙戈DB查詢上列表<地圖<字符串,地圖<字符串,字符串>>>
- 17. 無法隱式轉換 'System.Collections.Generic.Dictionary <字符串,System.Collections.Generic.List <string>>' 到 '系統... <字符串,字符串>'
- 18. Python熊貓字符串 - >十六進制 - >整數 - >字符串轉換
- 19. 使用LINQ Datarow - >字符串代替Datarow - > String [] - >字符串,
- 20. 爲什麼我無法創建字典<字符串,字典<字符串,字符串>>?
- 21. 將字典<對象,字符串>轉換爲字典<字符串,字符串>
- 22. AS3 URL字符串 - > URLRequest
- 23. JSON->字符串在Python
- 24. XPathSelectElements =>字符串表示
- 25. 字符串ArrayList <String>
- 26. c#空字符串 - > null?
- 27. System.Collection.Generic.IEnummerable <string> ==字符串
- 28. 對Go字符串進行迭代以提取特定的子字符串
- 29. 如何使用Go在另一個字符串中插入字符串lang
- 30. 字節>字符串>字節>文件VB
可能重複[逐行讀取文件中的文件](http://stackoverflow.com/questions/8757389/reading-file-line-by-line-in-go) – Malcolm 2014-04-16 14:08:32