Golang:跳过文件中的空白

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

在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)

    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)
}