From d33fbd13f91f9954a5bb5989352213a1bb701e45 Mon Sep 17 00:00:00 2001 From: Laurent Ulrich Date: Fri, 12 Jul 2024 15:59:03 +0200 Subject: [PATCH] =?UTF-8?q?Ok=20=C3=A7a=20avance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- csvparser.go | 20 ++++++++++++-------- csvparser_test.go | 21 ++++++++++++++++++++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/csvparser.go b/csvparser.go index d58f12d..65a1fb6 100644 --- a/csvparser.go +++ b/csvparser.go @@ -47,12 +47,16 @@ func (p *CsvParser) Parse(line string) (map[string]string, error) { indexMax := len(line) - 1 for index, r := range line { if index == indexMax { - fmt.Println("EOL") if currentFieldIndex < len(p.fields) { - fmt.Println("start:", valueStart, "end:", index) - fmt.Println("Found a field value for:", p.fields[currentFieldIndex], line[valueStart:index]) - ret[p.fields[currentFieldIndex]] = line[valueStart:index] - fmt.Println("Index is:", index) + //fmt.Println("start:", valueStart, "end:", index) + //fmt.Println("Found a field value for:", p.fields[currentFieldIndex], line[valueStart:index]) + if inEnclosedField && r == currentEncloserEnd { + ret[p.fields[currentFieldIndex]] = line[valueStart:index] + } else { + ret[p.fields[currentFieldIndex]] = line[valueStart : index+1] + } + + //fmt.Println("Index is:", index) } } if r == '\\' { @@ -64,10 +68,10 @@ func (p *CsvParser) Parse(line string) (map[string]string, error) { } else if r == p.delimiter { if currentFieldIndex < len(p.fields) { - fmt.Println("start:", valueStart, "end:", index) - fmt.Println("Found a field value for:", p.fields[currentFieldIndex], line[valueStart:index]) + //fmt.Println("start:", valueStart, "end:", index) + //fmt.Println("Found a field value for:", p.fields[currentFieldIndex], line[valueStart:index]) ret[p.fields[currentFieldIndex]] = line[valueStart:index] - fmt.Println("Index is:", index) + //fmt.Println("Index is:", index) valueStart = index + 1 } currentFieldIndex++ diff --git a/csvparser_test.go b/csvparser_test.go index 52a002d..95aa266 100644 --- a/csvparser_test.go +++ b/csvparser_test.go @@ -15,13 +15,15 @@ func TestCorrectLines(t *testing.T) { t.Fatalf("Parsing of empty line failed %v %v", err, event) } fmt.Println("event is", event) - line = "John Doe \"John Doe\"" + + line = "John" fmt.Println("parsing:", line) event, err = csvParser.Parse(line) if err != nil { t.Fatalf("Parsing of empty line failed %v %v", err, event) } fmt.Println("event is", event) + line = "John Doe" fmt.Println("parsing:", line) event, err = csvParser.Parse(line) @@ -29,6 +31,23 @@ func TestCorrectLines(t *testing.T) { t.Fatalf("Parsing of empty line failed %v %v", err, event) } fmt.Println("event is", event) + + line = "John \"John Doe\" Doe" + fmt.Println("parsing:", line) + event, err = csvParser.Parse(line) + if err != nil { + t.Fatalf("Parsing of empty line failed %v %v", err, event) + } + fmt.Println("event is", event) + + line = "John Doe \"John Doe\"" + fmt.Println("parsing:", line) + event, err = csvParser.Parse(line) + if err != nil { + t.Fatalf("Parsing of empty line failed %v %v", err, event) + } + fmt.Println("event is", event) + line = "John Doe I don't know him" fmt.Println("parsing:", line) event, err = csvParser.Parse(line)