From: sgf Date: Wed, 3 Aug 2022 15:44:49 +0000 (+0300) Subject: Fill in missed numbers. X-Git-Url: https://gitweb.sgf-dma.tk/?a=commitdiff_plain;h=704c6820723a97eec1a064339bd8e1950412d043;p=mir_japanese-words.git Fill in missed numbers. --- diff --git a/fix-columns/1.csv b/fix-columns/1.csv index cd6dbdc..96fa810 100644 --- a/fix-columns/1.csv +++ b/fix-columns/1.csv @@ -4,5 +4,5 @@ ",, ,あか ・ あかい,,赤 ・ 赤い ," красный цвет, красный ",, , ,,明るい, あかるい светлый,くらい , -,,秋 ,,あき осень,, +3,,秋 ,,あき осень,, ,,が,開く ,"  あく あける  открываться, раскрываться ",, diff --git a/fix-columns/fix-columns.go b/fix-columns/fix-columns.go index d70d4aa..d463e85 100644 --- a/fix-columns/fix-columns.go +++ b/fix-columns/fix-columns.go @@ -8,6 +8,7 @@ import ( "io" "unicode" "unicode/utf8" + "strconv" ) const ( @@ -111,24 +112,53 @@ func fixHiraganaInTranslation (record []string) ([]string) { return record } -func main() { - fnIn, err := os.Open("1.csv") - if err != nil { - fmt.Printf("Error: %v\n", err) - return +// Find max used row number. Do not modify anything. +func maxUsedNumber (n *int, record []string) []string { + x, err := strconv.Atoi(record[fieldNumber]) + if err == nil && *n < x { + *n = x } + return record +} - fnOut, err := os.OpenFile("2.csv", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0755) +// Fill empty row numbers. 'maxUsedNumber' must be run first to find max unused +// row number. +func fixNumber (n *int, record []string) []string { + _, err := strconv.Atoi(record[fieldNumber]) if err != nil { - fmt.Printf("Error: %v\n", err) - return + fmt.Printf("Resetting 'number' field value '%v' to number '%v' in row '%v'\n", record[fieldNumber], *n, record) + record[fieldNumber] = strconv.Itoa(*n) + *n += 1 } + return record +} + +func fixColumns (fnIn io.ReadSeeker, fnOut io.Writer) { csvIn := csv.NewReader(fnIn) csvOut := csv.NewWriter(fnOut) defer csvOut.Flush() - for { + n := 0 + for i := 0; ; i++ { + record, err := csvIn.Read() + if err != nil { + if err == io.EOF { + break + } + fmt.Printf("Error: %v\n", err) + return + } + if i == 0 { + continue + } + maxUsedNumber(&n, record) + } + fmt.Printf("Maximum row number '%v'\n", n) + n += 1 + + fnIn.Seek(0, io.SeekStart) + for i := 0; ; i++ { l, err := csvIn.Read() if err != nil { if err == io.EOF { @@ -139,10 +169,12 @@ func main() { } fmt.Printf("row: %v\n", l) f := func (record []string) []string { - return trimRecordSpaces(fixHiraganaInTranslation(record)) + return fixNumber(&n, trimRecordSpaces(fixHiraganaInTranslation(record))) } - //err = csvOut.Write(splitReading(l)) - err = csvOut.Write(f(l)) + if i > 0 { + l = f(l) + } + err = csvOut.Write(l) if err != nil { fmt.Printf("Error: %v\n", err) return @@ -150,3 +182,21 @@ func main() { } } +func main() { + fnIn, err := os.Open("1.csv") + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + defer fnIn.Close() + + fnOut, err := os.OpenFile("2.csv", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0755) + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + defer fnOut.Close() + + fixColumns(fnIn, fnOut) +} +