package main
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
func main() {
translate("output.txt")
parse("input.txt")
}
/**
解码
*/
func parse(name string) {
file, err := os.Open(name)
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
defer file.Close()
fileScanner := bufio.NewScanner(file)
for fileScanner.Scan() {
//根据逗号切割
arr := strings.Split(fileScanner.Text(), ",")
tmp_arr := []string{}
all_n := 0
for _, v := range arr {
cur_n := strings.Count(v, string('"'))
all_n += cur_n //到目前出现的引号总个数
//奇数+奇数 = 偶数
if len(tmp_arr) > 0 && ((cur_n%2 == 1 && all_n%2 == 0) || cur_n == 0 && all_n%2 == 1) {
tmp_arr[len(tmp_arr)-1] = tmp_arr[len(tmp_arr)-1] + "," + v
} else {
tmp_arr = append(tmp_arr, v)
}
}
newLine := []string{}
for _, v := range tmp_arr {
if len(v) >= 2 && v[0] == '"' && v[len(v)-1] == '"' {
v = v[1 : len(v)-1]
v = strings.Replace(v, `""`, `"`, -1)
}
newLine = append(newLine, v)
}
result := strings.Join(newLine, "\t")
fmt.Println(result)
}
}
/**
编码
*/
func translate(name string) {
file, err := os.Open(name)
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
defer file.Close()
fileScanner := bufio.NewScanner(file)
for fileScanner.Scan() {
//根据逗号切割
arr := strings.Split(fileScanner.Text(), " ")
ret := []string{}
for _, v := range arr {
v = strings.Replace(v, `"`, `""`, -1)
if strings.Contains(v, ",") || strings.Contains(v, `"`) {
v = `"` + v + `"`
}
ret = append(ret, v)
}
result := strings.Join(ret, ",")
fmt.Println(result)
//写入文件
//input, err := os.OpenFile("input.txt", os.O_WRONLY|os.O_APPEND, 0666)
//if err != nil {
// log.Fatalf("文件打开失败: %s", err)
//}
//defer input.Close()
//
//write := bufio.NewWriter(input)
//write.WriteString(result + "\n")
//write.Flush()
}
}
output.txt
2 John 45 足球,摄影 New York
3 Carter Job 33 "健身",远足 河北,石家庄
4 Steve 33 大屏幕164" DC"Home"
5 Jul,y 33 Football Canada
input.txt
2,John,45,"足球,test,摄影",New York
3,Carter Job,33,"""健身"",远足","河北,石家庄"
4,Steve,33,"大屏幕164""","DC""Home"""
5,"Jul,y",33,Football,Canadaou