This commit is contained in:
laurentu 2022-05-04 12:52:06 +02:00
parent 582365a790
commit 4806216045
2 changed files with 13 additions and 6 deletions

View File

@ -29,19 +29,19 @@ var EnclosersRunes = map[EncloserId]Encloser{
CurlyBrackets: Encloser{'{', '}'}, CurlyBrackets: Encloser{'{', '}'},
} }
type CsvParser struct { type Parser struct {
Enclosers []EncloserId Enclosers []EncloserId
Delimiter string Delimiter string
Fields []string Fields []string
Line string Line string
} }
func (parser *CsvParser) Init() { func (parser *Parser) Init() {
parser.Enclosers = []EncloserId{DoubleQuotes, SquareBrackets} parser.Enclosers = []EncloserId{DoubleQuotes, SquareBrackets}
parser.Delimiter = " \t" parser.Delimiter = " \t"
} }
func (parser *CsvParser) ExtractEnclosedFieldValue(endChar byte) error { func (parser *Parser) ExtractEnclosedFieldValue(endChar byte) error {
lineLen := len(parser.Line) lineLen := len(parser.Line)
for i := 1; i < lineLen; i++ { for i := 1; i < lineLen; i++ {
if parser.Line[i] == endChar && parser.Line[i-1] != '\\' { if parser.Line[i] == endChar && parser.Line[i-1] != '\\' {
@ -53,7 +53,14 @@ func (parser *CsvParser) ExtractEnclosedFieldValue(endChar byte) error {
return errors.New("Encloser close not found") return errors.New("Encloser close not found")
} }
func (parser *CsvParser) Parse(CsvLine string) error { /*
* Usage:
* import "../csv-parser/"
* var parser csvparser.Parser
* parser.init()
* parser.Parse("a b c d")
*/
func (parser *Parser) Parse(CsvLine string) error {
var err error = nil var err error = nil
parser.Fields = make([]string,0) parser.Fields = make([]string,0)

View File

@ -6,7 +6,7 @@ import(
func TestParse(t *testing.T) { func TestParse(t *testing.T) {
var parser CsvParser var parser Parser
var CsvTestValues = [...]string { var CsvTestValues = [...]string {
"field1 field2 field3", // standard CSV "field1 field2 field3", // standard CSV
@ -38,7 +38,7 @@ func TestParse(t *testing.T) {
} }
} }
func TestParseWithEscape(t *testing.T) { func TestParseWithEscape(t *testing.T) {
var parser CsvParser var parser Parser
var CsvTestValues = [...]string { var CsvTestValues = [...]string {
"\"\\\"field1 and more\" field2 [\\[field3] ", // Enclosed fields "\"\\\"field1 and more\" field2 [\\[field3] ", // Enclosed fields