在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()
}
答案 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字符而不是单个字节。