猿问

Golang:跳过文件中的空格

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


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

    }


子衿沉夜
浏览 249回答 1
1回答

慕哥9229398

除非我误解了您的问题,否则您continue在遇到空格时似乎需要声明。c := make([]byte, 100)n, err := this.file.Read(c)//skip white spacefor {&nbsp; &nbsp; //catch unintended errors&nbsp; &nbsp; if err != nil && err != io.EOF {&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }&nbsp; &nbsp; if err == io.EOF {&nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; }&nbsp; &nbsp; for i := 0; i < n; i++ {&nbsp; &nbsp; &nbsp; &nbsp; ch := c[i]&nbsp; &nbsp; &nbsp; &nbsp; switch ch {&nbsp; &nbsp; &nbsp; &nbsp; case '{': // Do something&nbsp; &nbsp; &nbsp; &nbsp; case '}': // Do something else&nbsp; &nbsp; &nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if unicode.IsSpace(int(ch)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Do whatever&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; //get next&nbsp; &nbsp; n, err = this.file.Read(c)}我不知道你为什么一次读一个字节,但我还是故意这样写的。至少,我认为您想要读取完整的 unicode 字符而不是单个字节。
随时随地看视频慕课网APP

相关分类

Go
我要回答