Import CSV en erreur si un record contient un champ texte multi-ligne (encadré par des ")

,

Bonjour,
lors du chargement d’un jeu de données CSV, j’ai constaté que les records contenant des valeurs multi-lignes n’étaient pas bien traités au chargement:

DigitalAssetType;DigitalAssetName;DigitalAssetDesc;DigitalAssetDomain
BCSIProduct;Actual Building & Workshop Digital Twin;IT components enabling to manage the versions of the actual data that represent the industrial facilities (E.g.: 3D Scan).;F05
BCSIProduct;Inbound and Outbound Routes Design;"IT components enabling to define the network of sites and routes, that is or will be used to transport parts, materials and vehicles.
This business product also gathers the components enabling to estimate, per route, the expenses (oil consumption, tolls, ...) and the CO2 produced during the execution of a transport.
The transports may involve more or more transport means and may comprise one or more route legs.";F02

La première ligne est bien chargée mais pas la seconde (le champ DigitalAssetDesc est valorisé sur plusieurs lignes encloses entre deux "). Plus précisément la ligne n°2 est chargée mais en ne considérant que la première ligne de description et sans le champ DigitalAssetDomain.

L’erreur constatée dans les logs concerne un BCSIProduct sans DigitalAssetName (l’erreur correspond à la ligne de texte qui commence par “This business product …”).

Je précise que j’ai essayé en documentant (ou pas) les paramètres QUOTE, NEWLINE et MODE (Direct DB ou Indirect via XML).

Le reader de ligne n’est pas malin, il doit confondre le “\n” d’une cellule avec le “\n” de fin de ligne.

Il faut essayer avec un autre caractère, par exemple changez tous les \n de cellule par du texte exemple %CR%. Ca marchera mais ça obligera à pré-processer les valeurs du CSV.

Il faudrait que le \n soit mieux géré, je croyais qu’on avait intégré une lib CSV qui parse mieux les lignes mais non, on va regarder.

Bonjour François,
Merci pour ton retour.
J’ai en effet suivi cette logique pour contourner le problème : SUBSTITUE(CAR(10),“xxx”) depuis la source Excel et requête SQL REPLACE(“xxx”,"\n") après l’import CSV.
Ce n’est donc pas bloquant.
Par contre, cette fonctionnalité d’import CSV “générique” semble très intéressante pour être mise à disposition de quelques users “administrateurs métier” qui seraient habilités à mettre à jour en masse les informations de certaines listes. Dans cette perspective, il n’est pas envisageable de devoir s’appuyer sur ces mécanismes (SUBSTITUE/REPLACE). J’ai donc remonté le problème en espérant qu’une solution existe :)
Question subsidiaire: quelles seraient les habilitations nécessaires pour que cette fonctionnalité soit rendue accessible ? (autres que les habilitations nécessaires sur les objets métier, évidemment)

Bonjour,

Ce vieux bug sera corrigé dans la version 5.2 : Le parser CSVAdapter sera remplacé par CSVAdapaterCommon basé sur la lib Apache Common CSV.

En 5.3, il y aura aussi un CSVAdapaterOpen basé sur OpenCSV pour plus de souplesse dans les API.

Il n’est pas prévu de backporter pour le moment en 4.0, car ce post date de 2020 et vous avez surement eu le temps d’upgrader en V5. @bmo

1 Like

Bonsoir François,
merci beaucoup.
Oui en effet nous attendrons d’avoir déployé la 5.2 pour ouvrir ce service.