",,
,あか ・ あかい,,赤 ・ 赤い ," красный цвет, красный ",,
, ,,明るい, あかるい светлый,くらい ,
-,,秋 ,,あき осень,,
+3,,秋 ,,あき осень,,
,,が,開く ," あく あける открываться, раскрываться ",,
"io"
"unicode"
"unicode/utf8"
+ "strconv"
)
const (
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 {
}
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
}
}
+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)
+}
+