I am trying to parse serial input into sentences, then assign those sentences to a variable. Here is an example of what I am trying to do. My serial port currently outputs this:
This is the first sentence.
This is the second sentence.
This is the third sentence.
I read this in and print it by using:
scanner := bufio.NewScanner(port)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
What I would like to do is I want to assign each sentence to a new variable. I want to later do something like this (example):
fmt.Printf("First sentence: %q
", firstSen)
fmt.Printf("Second sentence: %q
", secondSen)
fmt.Printf("Third sentence: %q
", thirdSen)
And it should output:
First sentence: This is the first sentence.
Second sentence: This is the second sentence.
Third sentence: This is the third sentence.
How can do I go about doing this? Thank you.
Collect the lines from the input:
var lines []string
scanner := bufio.NewScanner(port)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
// handle error
}
Loop through variables assigning a line to the variable:
var firstSen, secondSen, thirdSen string
for i, s := range []*string{&firstSen, &secondSen, &thirdSen} {
if i >= len(lines) {
break
}
*s = lines[i]
}
Print as shown in the question:
fmt.Printf("First sentence: %q
", firstSen)
fmt.Printf("Second sentence: %q
", secondSen)
fmt.Printf("Third sentence: %q
", thirdSen)
Depending on your requirements, you can drop the variables and use the slice of lines directly:
fmt.Printf("First sentence: %q
", line[0])
fmt.Printf("Second sentence: %q
", line[1])
fmt.Printf("Third sentence: %q
", line[2])