Insertion données
cedric
-
KX Messages postés 19031 Statut Modérateur -
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
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
A voir également:
- Insertion données
- Fuite données maif - Guide
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion video powerpoint - Guide
3 réponses
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.
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.
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
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.
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.
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.
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"));
}
}