Created
February 16, 2022 23:57
-
-
Save aziis98/49abc78bb0c856a39d6bf5e83929cea3 to your computer and use it in GitHub Desktop.
Go extract experiments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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