Skip to content

Instantly share code, notes, and snippets.

@dntf-studio
Created April 28, 2021 12:13
Show Gist options
  • Save dntf-studio/1e1dc3b230e3f7ad4598ba6ed2fa1c88 to your computer and use it in GitHub Desktop.
Save dntf-studio/1e1dc3b230e3f7ad4598ba6ed2fa1c88 to your computer and use it in GitHub Desktop.
csv単語帳
package main
import (
"bufio"
"encoding/csv"
"fmt"
"io"
"log"
"os"
"os/exec"
"strconv"
"strings"
)
/*
結局いつもの初心者殴り書きになってしまった。。
これじゃGOで書いたといってもc#と大してやってること変わらんな。。
一応やったことないことに挑戦しようと思ってポインタとアドレス一回だけ使ってるけど、もう返り値でええやんってなってまう
*/
func main() {
start:
file, err := os.Open("data.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
reader := csv.NewReader(file)
var lines, datas, words, meaning []string
reader.FieldsPerRecord = -1
for {
lines, err = reader.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
datas = append(datas, lines...)
}
for i, v := range datas {
if strings.HasPrefix(v, "#") {
list_remove(datas, i)
}
}
for i, v := range datas {
if i%2 == 0 {
words = append(words, v)
} else {
meaning = append(meaning, v)
}
}
only_words(words)
write:
cmd := exec.Command("cmd", "/c", "cls")
cmd.Stdout = os.Stdout
path, _ := os.Getwd()
for {
read := readline()
if read == "@m" {
cmd.Run()
both_words(words, meaning)
goto write
} else if read == "@w" {
cmd.Run()
only_words(words)
goto write
} else if read == "@bor" {
cmd.Run()
borderd_both_words(words, meaning)
goto write
} else if read == "@edit" {
path += "/data.csv"
note := "notepad"
note += " " + path
cmd2 := exec.Command("cmd", "/c", note)
cmd2.Stdout = os.Stdout
cmd2.Run()
} else if read == "@r" {
cmd.Run()
goto start
} else if read == "@hi" {
fmt.Print("index? >> ")
read_ := readline()
read_ = strings.TrimSpace(read_)
if v, err := strconv.Atoi(read_); err == nil {
fmt.Print("color? >> ")
_read := readline()
_read = strings.TrimSpace(_read)
flag := _read == "black" || _read == "red" || _read == "green" || _read == "yellow" || _read == "blue" || _read == "cyan" || _read == "magenta" || _read == "white"
var color_num int
if flag {
colorchecker(&color_num, _read)
words[v] = highlight(words[v], color_num)
cmd.Run()
only_words(words)
goto write
} else {
fmt.Println("please input colorname {black,red,green,yellow,blue,magenta,cyan,white}")
}
} else {
fmt.Println("please input a number")
}
} else if read == "exit" {
os.Exit(0)
} else {
cmd.Run()
only_words(words)
goto write
}
}
}
func highlight(word string, num int) string {
//word = strings.TrimSpace(word)
s := strconv.Itoa(num)
words := "\x1b[" + s + "m" + word + "\x1b[0m"
return words
}
func colorchecker(num *int, color string) {
switch color {
case "black":
*num = 30
case "red":
*num = 31
case "green":
*num = 32
case "yellow":
*num = 33
case "blue":
*num = 34
case "magenta":
*num = 35
case "cyan":
*num = 36
case "white":
*num = 37
}
}
func only_words(words []string) {
fmt.Println("\n<-----------------WORDS-------------------->")
for i, v := range words {
fmt.Println(i, ": ", v)
//fmt.Println("--------------------------------------------------------------------------")
}
}
func both_words(words []string, means []string) {
fmt.Println("\n<-----------------WORDS--------------------|---------MEANS--------------->")
for i, v := range words {
if i > 10 && i < 100 {
fmt.Println(i, ": ", v, "| ", means[i])
} else {
fmt.Println(i, ": ", v, " | ", means[i])
}
}
}
func borderd_both_words(words []string, means []string) {
fmt.Println("\n<-----------------WORDS--------------------|---------MEANS--------------->")
for i, v := range words {
if i > 10 && i < 100 {
fmt.Println(i, ": ", v, "| ", means[i])
fmt.Println("--------------------------------------------------------------------------")
} else {
fmt.Println(i, ": ", v, " | ", means[i])
fmt.Println("--------------------------------------------------------------------------")
}
}
}
func reflesh() {
file, err := os.Open("data.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
reader := csv.NewReader(file)
var lines, datas, words, meaning []string
reader.FieldsPerRecord = -1
for {
lines, err = reader.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
datas = append(datas, lines...)
}
for i, v := range datas {
if i%2 == 0 {
words = append(words, v)
} else {
meaning = append(meaning, v)
}
}
}
func list_remove(list []string, index int) []string {
if index >= len(list) {
return list
}
return append(list[:index], list[index+1:]...)
}
func readline() (input string) {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
input = scanner.Text()
input = strings.TrimSpace(input)
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment