橡皮鸭调试效果再次起作用。提出问题后,我自己找到了答案。这是以防其他人遇到与我相同的问题。
在下面的示例中,我将简单地打印出读取的数据
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
func loadFile( fileName string ) {
// Open file and instantiate a reader
file, err := os.Open(fileName)
if err != nil {
log.Fatal(err)
}
reader := bufio.NewReader(file)
var {
value0 uint64,
nbrRows uint16
}
// Read header values
if _,err := fmt.Fscanf(reader, "%d %d\n", &value0, &nbrRows); err != nil {
log.Fatal(err)
}
// Iterate on the rows
for i := uint16(0); i < nbrRows; i++ {
var {
value1 uint64,
value2 uint16,
value3 string,
value4 string
}
// Read first three row values
if _,err := fmt.Fscanf(reader, "%d %d %s\n", &value1, &value2, &value3); err != nil {
log.Fatal(err)
}
// Read remain of line
if value4,err := reader.ReadString('\n'); err != nil {
log.Fatal(err)
}
value4 = strings.Trim(value4," \n")
// Display the parsed data
fmt.Printf("%d %d %s '%s'\n", value1, value2, value3, value4)
}
// Iterate on the rows containing a single integer value
for i := uint16(0); i < nbrRows; i++ {
var value5 uint64
// Read the value
if _,err := fmt.Fscanf(reader, "%d\n", &value5); err != nil {
log.Fatal(err)
}
// Display the parsed data
fmt.Printf("%d\n", value5)
}
}
此代码假定 value4 不以空格或换行符开头和结尾,这是我的情况。这是因为 Trim() 调用将删除它们。