I'm writing a small pragram to number the paragraph:
- put paragraph number in front of each paragraph in the form of [1]..., [2]....
- Article title should be excluded.
Here is my program:
- package main
-
- import (
- "fmt"
- "io/ioutil"
- )
-
- var s_end = [3]string{".", "!", "?"}
-
- func main() {
- b, err := ioutil.ReadFile("i_have_a_dream.txt")
- if err != nil {
- panic(err)
- }
-
- p_num, s_num := 1, 1
-
- for _, char := range b {
- fmt.Printf("[%s]", p_num)
- p_num += 1
- if char == byte("
- ") {
- fmt.Printf("
- [%s]", p_num)
- p_num += 1
- } else {
- fmt.Printf(char)
- }
- }
- }
http://play.golang.org/p/f4S3vQbglY
I got this error:
- prog.go:21: cannot convert "
- " to type byte
- prog.go:21: cannot convert "
- " (type string) to type byte
- prog.go:21: invalid operation: char == "
- " (mismatched types byte and string)
- prog.go:25: cannot use char (type byte) as type string in argument to fmt.Printf
- [process exited with non-zero status]
How to convert string to byte?
What is the general practice to process text? Read in, parse it by byte, or by line?
Update
I solved the problem by converting the buffer byte to string, replacing strings by regular expression. (Thanks to @Tomasz Kłak for the regexp help)
I put the code here for reference.
- package main
-
- import (
- "fmt"
- "io/ioutil"
- "regexp"
- )
-
-
- func main() {
- b, err := ioutil.ReadFile("i_have_a_dream.txt")
- if err != nil {
- panic(err)
- }
-
- s := string(b)
- r := regexp.MustCompile("(
- )+")
- counter := 1
-
- repl := func(match string) string {
- p_num := counter
- counter++
- return fmt.Sprintf("%s [%d] ", match, p_num)
- }
-
- fmt.Println(r.ReplaceAllStringFunc(s, repl))
- }