Last active
April 22, 2022 06:41
-
-
Save lazywhite/9641c1e2e45df1f31dcc8a37fc646e17 to your computer and use it in GitHub Desktop.
parse csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
) | |
/* | |
输入文件构成规则如下: | |
1. 每行代表一条记录,字段之间以逗号(,)分隔 | |
2. 若字段内容包含逗号(,),则以双引号包围该字段 | |
3. 若字段内容包含双引号("),则以双引号包围该字段,字段内的双引号由一个变两个 | |
请参照上面三条规则,编写一个解析程序,将解析后的记录内容按行输出,字段之间以TAB(\t)分隔,2小时内完成 | |
示例: | |
John,33,"足球,摄影",New York | |
John,33,"足球,""摄影",New York | |
输出: | |
John 33 足球,摄影 New York | |
John 33 足球,"摄影 New York | |
输入: | |
2,John,45,"足球,摄影",New York | |
3,Carter Job,33,"""健身"",远足","河北,石家庄" | |
4,Steve,33,"大屏幕164""","DC""Home""" | |
5,"Jul,y",33,Football,Canada | |
求输出! | |
*/ | |
func main() { | |
input := []byte(`2,John,45,"足球,摄影",New York | |
3,Carter Job,33,"""健身"",远足","河北,石家庄" | |
4,Steve,33,"大屏幕164""","DC""Home""" | |
5,"Jul,y",33,Football,Canada`) | |
parseCsv(input) | |
fmt.Println(string(input)) | |
} | |
func parseCsv(input []byte) { | |
quote := 0 | |
for i := range input { | |
char := input[i] | |
if char == ',' { | |
if quote == 0 { | |
input[i] = '\t' | |
} | |
} | |
if char == '"' { | |
if quote == 0 { | |
quote++ | |
} else { | |
quote-- | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment