Column constants. Split "hiragana fix" filter into "trim spaces" filter and "hiragana...
authorsgf <sgf.dma@gmail.com>
Wed, 3 Aug 2022 14:22:35 +0000 (17:22 +0300)
committersgf <sgf.dma@gmail.com>
Wed, 3 Aug 2022 16:26:54 +0000 (19:26 +0300)
fix-columns/1.csv
fix-columns/fix-columns.go

index 20efb30..3354d48 100644 (file)
@@ -1,7 +1,7 @@
 номер,слова,частицы,иероглифы,переводы,связанные,теги
 ,に・と,会う ,あう,"встречаться, видеться", 迎える,
 ,,青 ・ 青い ,あお ・ あおい," синий цвет, синий, голубой,бледный
-,",,
+",,
 ,,赤 ・ 赤い ,あか ・ あかい," красный цвет, красный ",,
 ,,明るい, ,  あかるい светлый,くらい ,
 ,,秋 ,,あき осень,,
index ebc0273..2c74642 100644 (file)
@@ -10,6 +10,16 @@ import (
     "unicode/utf8"
 )
 
+const (
+    fieldNumber = iota
+    fieldParticle
+    fieldKanji
+    fieldReading
+    fieldTranslation
+    fieldRelated
+    fieldTags
+)
+
 // Select prefix satisfying predicate. If entire string satisfies predicate,
 // index will equal to len(str) (i.e. effectively be out of range).
 func many (str string, p func (rune) bool) int {
@@ -78,17 +88,8 @@ func isEmptyField (field string) bool {
     return true
 }
 
-func splitReading (record []string) ([]string) {
+func trimRecordSpaces (record []string) ([] string) {
     for i := 0; i < len(record); i += 1 {
-        if i == 2 && isEmptyField(record[2]) {
-            field := record[3]
-            start, end := selectSubstring(field, isHiragana)
-            //r, _ := utf8.DecodeRuneInString(field[start:])
-            //fmt.Printf("hiragana: start = %v (%q), end = %v\n", start, r, end)
-            record[2] = field[start:end]
-            record[3] = field[end:]
-            continue
-        }
         field := record[i]
         start, end := selectSubstring(field, isNotSpace)
         record[i] = field[start:end]
@@ -97,6 +98,19 @@ func splitReading (record []string) ([]string) {
     return record
 }
 
+func fixHiraganaInTranslation (record []string) ([]string) {
+    if isEmptyField(record[fieldReading]) {
+        field := record[fieldTranslation]
+        start, end := selectSubstring(field, isHiragana)
+        //r, _ := utf8.DecodeRuneInString(field[start:])
+        //fmt.Printf("hiragana: start = %v (%q), end = %v\n", start, r, end)
+        record[fieldReading] = field[start:end]
+        record[fieldTranslation] = field[end:]
+    }
+
+    return record
+}
+
 func main() {
     fnIn, err := os.Open("1.csv")
     if err != nil {
@@ -124,7 +138,11 @@ func main() {
             return
         }
         fmt.Printf("row: %v\n", l)
-        err = csvOut.Write(splitReading(l))
+        f := func (record []string) []string {
+            return trimRecordSpaces(fixHiraganaInTranslation(record))
+        }
+        //err = csvOut.Write(splitReading(l))
+        err = csvOut.Write(f(l))
         if err != nil {
             fmt.Printf("Error: %v\n", err)
             return