Golang:在文件中跳过空白

时间:2015-09-24 19:28:44

标签: 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)

    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(符文)

char, size, err := this.reader.ReadRune()
    //skip white space and comments
    for {
            //catch unintended errors
            if err != nil && err != io.EOF {
                    panic(err)
            }
            if err == io.EOF {
                    break
            }

            //skip it when their is no data or a space
            if size != 0 && char == '{' {
                    //Ignore Comments
                    //Documentation specifies no nested comments
                    for char != '}' {
                            char, size, err = this.reader.ReadRune()
                    }
            } else if !unicode.IsSpace(char) {
                    break
            }

            // Do something with the byte
            fmt.Print(char)

            //get next
            char, size, err = this.reader.ReadRune()
    }

1 个答案:

答案 0 :(得分:2)

除非我误解了您的问题,否则您在遇到空格时似乎需要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)
}

我不知道为什么你一次只读一个字节,但是如果它是故意的话,我就这样离开了。至少,我认为您想要读取完整的unicode字符而不是单个字节。