sort-text-lines/SortTextLines.go

63 lines
1.1 KiB
Go
Raw Normal View History

2023-05-23 17:25:00 +08:00
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
"sort"
"strings"
)
var src string = ""
var dst string = ""
var trm bool = false
func init() {
flag.StringVar(&src, "i", "", "Input File")
flag.StringVar(&dst, "o", "", "Output File")
2023-05-25 10:28:45 +08:00
flag.BoolVar(&trm, "t", false, "Trim all leading and trailing spaces of each line")
2023-05-23 17:25:00 +08:00
flag.Parse()
}
func main() {
if src == "" || dst == "" {
2023-05-25 10:28:45 +08:00
flag.Usage()
2023-05-23 17:25:00 +08:00
os.Exit(1)
}
fsi, err := os.Open(src)
if err != nil {
fmt.Printf("[ERR] %v\r\n", err)
os.Exit(1)
}
defer fsi.Close()
var lines []string
scn := bufio.NewScanner(fsi)
for scn.Scan() {
if trm {
lines = append(lines, strings.TrimSpace(scn.Text()))
2023-05-25 10:28:45 +08:00
continue
2023-05-23 17:25:00 +08:00
}
2023-05-25 10:28:45 +08:00
lines = append(lines, scn.Text())
2023-05-23 17:25:00 +08:00
}
sort.Strings(lines)
fso, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
fmt.Printf("[ERR] %v\r\n", err)
}
defer fso.Close()
for _, line := range lines {
_, err = fso.WriteString(line + "\r\n")
if err != nil {
log.Printf("[ERR] %v\r\n", err)
continue
}
}
fso.Sync()
fso.Close()
}