Insertion données

cedric -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Je souhaite importer un fichier txt dans une table de ma base, cependant l'ors de l'import j'ai un méssage d'erreur me disant extra data after last expected column, le fichier s'importe correctement en .csv, mais le problème est que j'ai un programme qui télécharge ces fichier .txt tout les mois, cela doit être automatique je ne peut donc pas convertir tout les mois mon fichier.

Auriez vous une solution svp je suis sous une base postgre sql le fichier est disponible a cette adresse http://base-donnees-publique.medicaments.gouv.fr/telechargement.php?fichier=CIS_HAS_SMR_bdpm.txt

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,
    Le souci vient surement de la dernière colonne du fichier text...
    En effet, selon comment tu as codé l'import ... il se peut que cette colonne contienne, dans le texte, un caractère compris par ton script comme un séparateur..( virgule ou point-virgule...ou comme je le pense...des tabulations !)

    Il faut donc que ton script nettoie ce fichier avant de pouvoir l'importer....
    Comme tu connais le nombre de colonnes (ce nombre est fixe je pense...) il te suffit de remplacer toutes les tabulations (ou autre caractère séparateur) de la dernière colonne par des espaces par exemple... Ensuite tu pourras l'importer.

    0
  2. cedric
     
    merci pour ta reponse mais je ne voit pas comment faire en java (pck sa doit etre du java, l'environnement de dev utilisé dans ma boite) pour realisé cela
    0
    1. cedric
       
      ok merci :)
      0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Le fichier a l'air bien formé, il n'y a pas d'espace ou de tabulation en fin de ligne, et il y a toujours 6 colonnes. Donc pas vraiment besoin de faire du nettoyage, un simple chercher/remplacer sur la tabulation pour le remplacer par un point virgule suffira.

    Par contre attention à l'encodage. Car il y a des caractères spéciaux français (les apostrophes notamment), cela peut aussi poser problème pour ton transfert en base de données.

    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.List;
    
    public class Translate {
    
        public static String translate(String line) {
            return line.replace('\t', ';');
        }
    
        public static void translate(List<String> lines) {
            for (int i = 0; i < lines.size(); i++)
                lines.set(i, translate(lines.get(i)));
        }
    
        public static void translate(String fileTxt, String fileCsv, Charset charset) throws IOException {
            List<String> lines = Files.readAllLines(Paths.get(fileTxt), charset);
            translate(lines);
            Files.write(Paths.get(fileCsv), lines, charset);
        }
    
        public static void main(String[] args) throws IOException {
            translate("C:/CIS_HAS_SMR_bdpm.txt", "C:/CIS_HAS_SMR_bdpm.csv", Charset.forName("windows-1252"));
        }
    }
    0