我正在逐行读取文件,并且希望根据子字符串拆分行。但是,当我在读取行通过的情况下使用SplitAfterN时,我正面临以下错误,
无法将“变量”([]字符串类型)转换为字符串类型
其中“变量” = []字符串类型
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
"strings"
)
func main() {
var fLine []string
FileName := flag.String("fpath", "Default file path", "File path description ")
flag.Parse()
fptr, err := os.Open(*FileName)
if err != nil {
log.Fatal(err)
}
FileScanner := bufio.NewScanner(fptr)
for FileScanner.Scan() {
// Append each line into one buffer while reading
fLine = append(fLine, FileScanner.Text())
splitline := strings.SplitAfterN(fLine, "12345", 2)
fmt.Println("Splited string = ", splitline[1])
}
}
我期望下面的行拆分传递的参数(fLine) splitline:= strings.SplitAfterN(fread,“ 12345”,2)
答案 0 :(得分:1)
您读取的(最后)行不是fLine
,而是所有行的一部分。最后一行由FileScanner.Text()
返回。如果要分割最后一行,可以将其存储在变量中,也可以使用切片的最后一个元素。
如果您选择将其存储在变量中:
line := FileScanner.Text()
fLine = append(fLine, line)
splitline := strings.SplitAfterN(line, "12345", 2)
如果您只想使用最后一个slice元素:
fLine = append(fLine, FileScanner.Text())
splitline := strings.SplitAfterN(fLine[len(fLine)-1], "12345", 2)
答案 1 :(得分:0)
所以您只想将切片转换为字符串,对吧?
这应该可以满足您的需求。
所以:
splitline := strings.SplitAfterN(strings.Join(fLine," "), "12345", 2)