github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/str.go (about)

     1  package util
     2  
     3  import (
     4  	"strings"
     5  )
     6  
     7  func ValIf[K interface{}](b bool, yes K, no K) K {
     8  	if b {
     9  		return yes
    10  	}
    11  	return no
    12  }
    13  
    14  func StrListFilter(s []string, f func(s string) string) []string {
    15  	result := make([]string, len(s))
    16  	for x, y := range s {
    17  		result[x] = f(y)
    18  	}
    19  	return result
    20  }
    21  
    22  func StrLinesGrep(text string, match string) []string {
    23  	lines := []string{}
    24  	for _, l := range strings.Split(text, "\n") {
    25  		if strings.Contains(l, match) {
    26  			lines = append(lines, l)
    27  		}
    28  	}
    29  	return lines
    30  }
    31  
    32  // scan through lines and extract the x'th field
    33  func StrLinesFieldX(lines []string, fieldnum int) []string {
    34  	res := []string{}
    35  	for _, l := range lines {
    36  		a := strings.Fields(l)
    37  		if len(a) > fieldnum {
    38  			res = append(res, a[fieldnum])
    39  		}
    40  	}
    41  	return res
    42  }
    43  
    44  func StrPrefix(prefix string, lines []string) []string {
    45  	for idx, x := range lines {
    46  		lines[idx] = prefix + x
    47  	}
    48  	return lines
    49  }
    50  
    51  func StrDirPrefix(prefix string, lines []string) []string {
    52  	if prefix != "" {
    53  		if !strings.HasSuffix(prefix, "/") {
    54  			prefix = prefix + "/"
    55  		}
    56  		for idx, v := range lines {
    57  			lines[idx] = prefix + v
    58  		}
    59  	}
    60  	return lines
    61  }
    62  
    63  func StrEscLF(str string) string {
    64  	return strings.Replace(
    65  		strings.Trim(str, " \n"), "\n", "\\n", -1)
    66  }
    67  
    68  func YesNo(yes bool) string {
    69  	if yes {
    70  		return "yes"
    71  	} else {
    72  		return "no"
    73  	}
    74  }
    75  
    76  func StrSplitTwo(s string, d string) (string, string) {
    77  	sp := strings.Split(s, d)
    78  	if len(sp) == 1 {
    79  		return strings.TrimSpace(sp[0]), ""
    80  	} else {
    81  		return strings.TrimSpace(sp[0]), strings.TrimSpace(sp[1])
    82  	}
    83  }