Golang:跳过文件中的空白
在Go中读取文件时,我试图跳过所有的空白;然而,我在找到正确的方法来做这件事时遇到了问题。如有任何协助,将不胜感激Golang:跳过文件中的空白,go,Go,在Go中读取文件时,我试图跳过所有的空白;然而,我在找到正确的方法来做这件事时遇到了问题。如有任何协助,将不胜感激 file, err := os.Open(filename) // For read access. this.file = file if err != nil { log.Fatal(err) } //skip white space c := make([]byte, 1) cha
file, err := os.Open(filename) // For read access.
this.file = file
if err != nil {
log.Fatal(err)
}
//skip white space
c := make([]byte, 1)
char, err := this.file.Read(c)
//skip white space
for {
//catch unintended errors
if err != nil && err != io.EOF {
panic(err)
}
if err == io.EOF || !unicode.IsSpace(int(c)) {
break
}
//get next
char, err := this.file.Read(c)
}
我只是尝试为一个文件创建一个扫描器,一次只读取一个字符,而忽略空白
编辑
为了利用bufio.Reader,我改变了一些东西;然而,我仍然陷入了一个问题:什么是一个字符一个字符读取文件的正确方法,以便可以将其与特定符号(如“a”)进行比较,但也可以忽略空白,即unicode.isSpace(符文)
除非我误解了你的问题,否则当遇到空格时,你似乎需要一个
continue
语句
c := make([]byte, 100)
n, err := this.file.Read(c)
//skip white space
for {
//catch unintended errors
if err != nil && err != io.EOF {
panic(err)
}
if err == io.EOF {
break
}
for i := 0; i < n; i++ {
ch := c[i]
switch ch {
case '{': // Do something
case '}': // Do something else
default:
if unicode.IsSpace(int(ch)) {
continue
}
// Do whatever
}
}
//get next
n, err = this.file.Read(c)
}
c:=make([]字节,100)
n、 错误:=this.file.Read(c)
//跳过空白
为了{
//捕捉意外错误
如果err!=nil&&err!=io.EOF{
恐慌(错误)
}
如果err==io.EOF{
打破
}
对于i:=0;i
我不知道你为什么一次只读一个字节,但我把它留了下来,以防万一是故意的。至少,我认为您应该读取完整的unicode字符,而不是单个字节。在浏览另一篇文章后收到错误后,我将其切换为1。正确的计数是多少。当我尝试上述操作时,我会收到下面的错误消息。/scanner.go:107:无法将c(type[]byte)转换为int类型。/scanner.go:107:无法将int(c)(type int)用作unicode参数中的类型符文。IsSpace@kdgwill:抱歉,我在
Println
中拉出了字节,但在IsSpace()
中没有拉出。固定的。没有正确的计数,但通常我会批量获取大于1
的字节。取决于要使用的内存量。如果内存不是问题,可以使用ioutil.ReadFile
一次获取所有数据。它在“io/ioutil”
包中。是的,我想防止将整个文件加载到内存中,通常我会尝试读取一个字符,以确定它是空白还是特定的字母/符号。如果您只关心ASCII字符,那么您可以批量执行任何大小的操作,例如100,并有一个嵌套循环来读取批处理。我会更新的。你没有说明你为什么要这么做。一种选择是使用golang.org/x/text/transform
从任何io.Reader
中过滤空白(例如),我只是在读取一个文件,试图为一个文件创建一个扫描仪,一次读取一个字符已经有了更好的方法,一次读取一个字节,
c := make([]byte, 100)
n, err := this.file.Read(c)
//skip white space
for {
//catch unintended errors
if err != nil && err != io.EOF {
panic(err)
}
if err == io.EOF {
break
}
for i := 0; i < n; i++ {
ch := c[i]
switch ch {
case '{': // Do something
case '}': // Do something else
default:
if unicode.IsSpace(int(ch)) {
continue
}
// Do whatever
}
}
//get next
n, err = this.file.Read(c)
}