github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/string/index.go (about) 1 package string 2 3 import ( 4 "bufio" 5 "fmt" 6 "strconv" 7 8 "github.com/lmorg/murex/lang" 9 "github.com/lmorg/murex/lang/types" 10 ) 11 12 func index(p *lang.Process, params []string) error { 13 lines := make(map[int]bool) 14 for i := range params { 15 num, err := strconv.Atoi(params[i]) 16 if err != nil { 17 return fmt.Errorf("Parameter, `%s`, isn't an integer. %s", params[i], err) 18 } 19 lines[num] = true 20 } 21 22 var ( 23 i int 24 err error 25 ) 26 27 scanner := bufio.NewScanner(p.Stdin) 28 for scanner.Scan() { 29 if lines[i] != p.IsNot { 30 _, err = p.Stdout.Writeln(scanner.Bytes()) 31 if err != nil { 32 break 33 } 34 } 35 i++ 36 } 37 38 if err != nil { 39 return err 40 } 41 42 err = scanner.Err() 43 if err != nil { 44 return fmt.Errorf("error while indexing a %s map: %s", types.String, err.Error()) 45 } 46 47 return nil 48 }