Sscan
, Sscanf
Parsing in values from space-separated strings is a problem that has existed for many years. Even the earliest programmers may have struggled with this problem.
With Sscan
and Sscanf
, we can parse strings into multiple values. Sscan
uses a space as a separator. And Sscanf
uses a format string
to guide its parsing.
Sscan
exampleHere we have a string
that has values in it separated by spaces. We pass the correct number of arguments (as references) to fmt.Sscan
. They are filled with the parsed values.
package main import "fmt" func main() { // Store values from Sscan in these locals. value1 := "" value2 := "" value3 := 0 // Scan the 3 strings into 3 local variables. // ... Must pass in the address of the locals. _, err := fmt.Sscan("Bird frog 100", &value1, &value2, &value3); // If the error is nil, we have successfully parsed the values. if err == nil { // Print the values. fmt.Println("VALUE1:", value1); fmt.Println("VALUE2:", value2); fmt.Println("VALUE3:", value3); } }VALUE1: Bird VALUE2: frog VALUE3: 100
Sscanf
With this method, we must specify a format string
to guide the parsing of the values. We can use standard format codes in the format string
.
Sscanf
works the same way as Sscan
except we must pass a format string
as the second argument.package main import "fmt" func main() { value1 := 0 value2 := "" value3 := 0 // Use format string to parse in values. // ... We parse 1 number, 1 string and 1 number. _, err := fmt.Sscanf("10 Bird 5", "%d %s %d", &value1, &value2, &value3); if err == nil { fmt.Println("VALUE1:", value1); fmt.Println("VALUE2:", value2); fmt.Println("VALUE3:", value3); } }VALUE1: 10 VALUE2: Bird VALUE3: 5
Sscan
versus splitWith split()
or fields()
we can separate values and parse them. This has some advantages over Sscan
, particularly for oddly-formed strings.
With fmt.Sscan
and Sscanf
we have built-in parsing methods for strings that contain multiple values. These methods, when used correctly, can simplify programs.