Insertion données

Fermé
cedric - 2 mars 2015 à 11:23
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 2 mars 2015 à 18:39
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

jordane45 Messages postés 37253 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 mars 2023 4 551
2 mars 2015 à 11:39
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
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
jordane45 Messages postés 37253 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 mars 2023 4 551
2 mars 2015 à 16:41
Voici un exemple :
https://javarevisited.blogspot.com/2011/12/java-string-replace-example-tutorial.html

PS: Ta question concernant le langage JAVA et non un problème de base de données à proprement parlé... je déplace le sujet dans la bonne section du forum.
0
ok merci :)
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
2 mars 2015 à 18:39
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