Разделение CSV на запятые за исключением случаев, когда строка в кавычках - PullRequest
0 голосов
/ 05 октября 2019

У меня проблемы с разделением CSV-файла с данными, подобными следующим

Кошка, машина, собака, "Строка, в которой запятая", самолет, грузовик

IПервоначально попытался разделить файл с помощью следующего кода ..

это приводит к

Cat

машина

собака

Строка

, в котором запятая

самолет

грузовик

        csvFile.splitEachLine( /,\s*/ ){ parts ->
            tmpMap = [:]
            tmpMap.putAt("column1", parts[0])
            tmpMap.putAt("column2", parts[1])
            tmpMap.putAt("column3", parts[2])
            tmpMap.putAt("column4", parts[3])



            mapList.add(tmpMap)

я бы хотел

Cat

машина

собака

строка, в которой запятая

самолет

грузовик

1 Ответ

0 голосов
/ 05 октября 2019

Вы должны немного изменить свое регулярное выражение:

def mapList = []
def csvFile = "Cat, car, dog, \"A string, that has comma's in it\", airplane, truck"
​csvFile.splitEachLine( /,(?=(?:[^"]*\"[^"]*")*[^"]*\Z)\s/ ){ parts ->        
    tmpMap = [:]           
    tmpMap.putAt("column1", parts[0])        
    tmpMap.putAt("column2", parts[1])        
    tmpMap.putAt("column3", parts[2])          
    tmpMap.putAt("column4", parts[3])  
    tmpMap.putAt("column5", parts[4]) 
    tmpMap.putAt("column6", parts[5]) 
    mapList.add(tmpMap)
}
​print mapList​

Но для этого лучше использовать уже созданные библиотеки. Это сделает вашу жизнь намного проще. Взгляните на https://github.com/xlson/groovycsv

...