diff --git a/main.go b/main.go index 608b3c3..1cb148b 100644 --- a/main.go +++ b/main.go @@ -2,37 +2,47 @@ package main import ( "bufio" + "encoding/csv" "fmt" "log" "os" "strings" - "sync" - "time" ) +type Words struct { + word string + translation string + transcription string +} + var ( full_name string lang_from string lang_to string ) -const ( - FIRST_LINES = 5 -) - func main() { - f, err := os.OpenFile("dict.xdxf", os.O_RDONLY, os.ModePerm) + fcsv, err := os.Create("./dict.csv") + if err != nil { + fmt.Println(err) + } + defer fcsv.Close() + + writer := csv.NewWriter(fcsv) + writer.Comma = '|' + + fxdfx, err := os.OpenFile("dict.xdxf", os.O_RDONLY, os.ModePerm) if err != nil { log.Fatalf("open file error: %v", err) return } - defer f.Close() + defer fxdfx.Close() - fullFile(f) + fullFile(fxdfx, writer) } -func fullFile(file *os.File) { - sc := bufio.NewScanner(file) +func fullFile(fxdfx *os.File, fcsv *csv.Writer) { + sc := bufio.NewScanner(fxdfx) /*for sc.Scan() { fmt.Println(sc.Text()) }*/ @@ -42,14 +52,14 @@ func fullFile(file *os.File) { } //skip first lines with some unnessesary data and save full name - first:="" + first := "" for sc.Scan() { line := sc.Text() if strings.Contains(line, "") { line = strings.ReplaceAll(line, "full_name>", "") line = strings.ReplaceAll(line, "") { - first= line + first = line break } } fmt.Printf("Dict name: %s.\n", full_name) fmt.Printf("From %s to %s. \n", lang_from, lang_to) - fmt.Println(first) - // read file line by line - var ( - word string - translation string - transcription string - ) + //fmt.Println(first) - for sc.Scan() { - line := sc.Text() - if strings.Contains(line, "") { - word = "" - translation = "" - transcription = "" - fmt.Println(word, translation, transcription) + // read file line by line + neww := new(Words) + for { + first = strings.TrimSpace(first) + if first == "" { + if sc.Scan() { + first += sc.Text() + } else { + break + } } - if strings.Contains(line, "") { - _, word, _ = strings.Cut(line, "") + if strings.Contains(first, "") { + neww.word = "" + neww.translation = "" + neww.transcription = "" + //fmt.Println(neww) + } + if strings.Contains(first, "") { + _, neww.word, _ = strings.Cut(first, "") + if strings.Contains(neww.word, "") { + neww.word, first, _ = strings.Cut(neww.word, "") + first = strings.TrimSpace(first) + if first == "" { + if sc.Scan() { + first += sc.Text() + } else { + break + } + } + } + } else if strings.Contains(first, "") { + _, neww.transcription, _ = strings.Cut(first, "") + if strings.Contains(neww.transcription, "") { + neww.transcription, first, _ = strings.Cut(neww.transcription, "") + first = strings.TrimSpace(first) + if first == "" { + if sc.Scan() { + first += sc.Text() + } else { + break + } + } + } + } else if strings.Contains(first, "") { + neww.translation, first, _ = strings.Cut(first, "") + first = strings.TrimSpace(first) + first = strings.TrimSpace(first) + if first == "" { + if sc.Scan() { + //fmt.Printf("Word: %s. Transcription: %s. Translation: %s.\n", neww.word, neww.transcription, neww.translation) + err := fcsv.Write([]string{neww.word, neww.transcription, neww.translation}) + if err != nil { + fmt.Println(err) + } + first += sc.Text() + } else { + break + } + } + } else { + if sc.Scan() { + //fmt.Printf("Word: %s. Transcription: %s. Translation: %s.\n", neww.word, neww.transcription, neww.translation) + first += sc.Text() + } else { + break + } } - fmt.Println(sc.Text()) } } -func processChunk(chunk []byte, linesPool *sync.Pool, stringPool *sync.Pool, start time.Time, end time.Time) { +/*func processChunk(chunk []byte, linesPool *sync.Pool, stringPool *sync.Pool, start time.Time, end time.Time) { } //readFile opens file in chunks and process to other func. https://medium.com/swlh/processing-16gb-file-in-seconds-go-lang-3982c235dfa2 func readFile() { -} +}*/