Skip to content

Instantly share code, notes, and snippets.

@aziis98
Created February 16, 2022 23:57
Show Gist options
  • Select an option

  • Save aziis98/49abc78bb0c856a39d6bf5e83929cea3 to your computer and use it in GitHub Desktop.

Select an option

Save aziis98/49abc78bb0c856a39d6bf5e83929cea3 to your computer and use it in GitHub Desktop.
Go extract experiments
package extract_test
import (
"regexp"
"strings"
"testing"
)
func lines(source string) chan string {
output := make(chan string)
go func() {
for _, line := range strings.Split(source, "\n") {
output <- line
}
close(output)
}()
return output
}
func Extract1(beginMark, endMark string, input chan string) chan string {
output := make(chan string)
go func() {
for line := range input {
if line == beginMark {
for line := range input {
if line == endMark {
break
}
output <- line
}
}
}
close(output)
}()
return output
}
func Extract2(beginMark, endMark string, input chan string) chan string {
output := make(chan string)
go func() {
for line, ok := <-input; ok; line, ok = <-input {
for ; ok; line, ok = <-input {
if line == beginMark {
line, ok = <-input
break
}
}
for ; ok; line, ok = <-input {
if line == endMark {
break
}
output <- line
}
}
close(output)
}()
return output
}
func TestExtract(t *testing.T) {
text := regexp.MustCompile(`(?m)^[ \t]*`).ReplaceAllString(`
1 Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Expedita illo aliquid id labore distinctio.
BEGIN
2 Quos debitis pariatur ex ipsa, vel dignissimos et cumque
odit provident, adipisci consequatur nobis, tempore sunt.
END
3 Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Expedita illo aliquid id labore distinctio.
BEGIN
4 Quos debitis pariatur ex ipsa, vel dignissimos et cumque
odit provident, adipisci consequatur nobis, tempore sunt.
END
5 Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Expedita illo aliquid id labore distinctio.
`, "")
t.Log(text)
extracted := Extract1("BEGIN", "END", lines(text))
for line := range extracted {
t.Log(line)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment