Mi objetivo es analizar un conjunto de datos CSV con datos no normalizados en algunas filas que están encerradas entre "". No puedo dividirlo por ";" porque este carácter también se usa dentro de los datos.
Me pregunto, si hay una manera fácil de resolver esto!?
Algunas filas contienen datos no normalizados en la columna "goes_to", otras en la columna "comes_from" como esta (ver fila 'John' y 'David'). Estos datos utilizan el ";" delimitador que crea problemas.
Name;goes_to;comes_from Peter;;London Ruth;Boston; Brandon;; John;;"Bern;Madrid;Tel Aviv" David;"New York;Paris;Berlin";Eventualmente, el objetivo es normalizar los datos y colocarlos en dos estructuras multimapa separadas, de modo que pueda acceder a esos datos individualmente.
comes_from_multimap.get('John'); >>> ['Bern', 'Madrid'] goes_to_multimap.get('David') >>> ['New York','Paris','Bern']Utilizo un líder de línea, leo el CSV línea por línea y logro extraer la cadena entre paréntesis como el siguiente código, para decidir si esta línea necesita normalización. Si la fila contiene datos no normalizados, usaría un bucle. Aunque con mi enfoque estoy perdiendo la información, si proviene de la columna "goes_to" o "comes_from" porque mi código solo me da el texto entre dos paréntesis sin el contexto de donde proviene.
nonNormalizedSubString = line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\""));prueba csv-parser
conjunto ; como delimitador, obtendrá una serie de resultados, por lo que puede usar la posición del elemento para determinar a qué columna pertenece y crear el conjunto de datos que necesita:
const csvParse = require('csv-parse') const data = `Name;goes_to;comes_from Peter;;London Ruth;Boston; Brandon;; John;;"Bern;Madrid;Tel Aviv" David;"New York;Paris;Berlin";` const records = csvParse.parse(data, { delimiter: ';', trim: true }, (err, records) => { console.log(records); });