PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème lors de import fichier texte avec himportetexte
Problème lors de import fichier texte avec himportetexte
Iniciado por FORNARI / EURL FORNA, 23,nov. 2019 19:36 - 15 respuestas
Miembro registrado
36 mensajes
Publicado el 23,noviembre 2019 - 19:36
Bonjour,

je voudrais importer un fichier texte dont la première ligne contient le nom des colonnes et les lignes suivantes les données.
Ce fichier texte est généré par un hexportcsv.

Voici le code de l'export
HExporteCSV(Facture,"D:\Facture.CSV",hExpCreation)


Et voici le code de l'import :
SI HImporteTexte(Facture1,"D:\"+sfichier,hImpIgnorePremièreLigne+hValDéfaut) ALORS
Info("import ok")
SINON
Info("erreur lors de l'import")
FIN

ou sfichier = "Facture.CSV"

Lors de l'exécution il ne génère aucune erreur et n'insère aucune ligne dans la table Facture1 qui est une copie de la table origine Facture.

Je ne vois pas où se trouve l'erreur.

Est-ce que quelqu'un est déjà tombé sur ce problème?

Merci d'avance pour votre aide.

Christian
Miembro registrado
2.321 mensajes
Publicado el 24,noviembre 2019 - 09:41
Bonjour,

Essayes :
SI HImporteTexte(Facture1,"D:\"+sfichier,"",hImpIgnorePremièreLigne+hValDéfaut) ALORS
Info("import ok")
SINON
Info("erreur lors de l'import")
FIN


--
Bon dev,
Jean-Pierre
Miembro registrado
143 mensajes
Publicado el 24,noviembre 2019 - 11:12
Bonjour,

J'ai cherché, mais pas trouvé pour Export-Import en CSV...

Par contre le code suivant fonctionne

HExporteXLS(AppCodes,"D:\Facture.xls",hExpCreation)

lsdAppCodes1 est une Source dede Données
HDéclareExterne("D:\AppCodes1.fic",lsdAppCodes1,"****")

SI HImporteXLS(lsdAppCodes1,"D:\Facture.xls",1,"",hImpIgnorePremièreLigne+hImpCreation) ALORS
Info("import ok")
SINON
Info("erreur lors de l'import")
FIN


Si cela peut t'aider

Bon dev

--
Yann Wagner

WHY-GemA sàrl
Mensaje modificado, 24,noviembre 2019 - 11:16
Miembro registrado
36 mensajes
Publicado el 25,noviembre 2019 - 14:26
Bonjour,

J'ai essayé cette méthode mais j'ai le même soucis. Il exécute la commande himporteTexte et renvoi vrai mais il n'y a aucune ligne dans le fichier Facture1.

J'ai fais un test en ouvrant le fichier avec la fonction fouvre et la ligne qui est lu donne un format étrange. Voici la procédure de lecture :
resOuverture est un entier
slignelue est une chaîne
tabLigne est un tableau de chaînes
resOuverture=fOuvre("D:\"+sfichier,foLecture)
SI resOuverture=-1 ALORS
Erreur(ErreurInfo(errMessage))
SINON
BOUCLE
// Lecture de la première ligne du fichier
slignelue = fLitLigne(resOuverture)
SI ErreurDétectée ALORS
Erreur(ErreurInfo())
SORTIR
FIN
// Fin de fichier ?
SI slignelue = EOT ALORS SORTIR
tabLigne=ChaîneDécoupe(slignelue,",")
FIN
// Fermeture du fichier
fFerme(resOuverture)
ToastAffiche("Lecture du fichier terminée")
FIN


Si l'on regarde ce qui se trouve dans la variable slignelue voici ce que cela donne





Donc un format avec des <0> entre chaque caractères.

Si j'ouvre le fichier sous un éditeur de texte les caractère <0> n'apparaissent pas.

Si quelqu'un a un idée je suis preneur.

Merci pour votre aide
Miembro registrado
36 mensajes
Publicado el 25,noviembre 2019 - 14:29
J'ai fais le test avec exportxls et importxls cela fonctionne bien effectivement mais j'aimerai savoir pourquoi cela ne fonctionne pas avec des fichiers texte que l'on a exporter.

Merci pour ses idées.

christian
Miembro registrado
2.321 mensajes
Publicado el 25,noviembre 2019 - 17:11
Bonjour,

1. Avez-vous ouvert le fichier avec Notepad pour vérifier son format ?
2 Essayez de rajouter les options hImpIgnoreLigneInvalide et hImpIgnoreRubriqueVide.

--
Bon dev,
Jean-Pierre
Publicado el 25,noviembre 2019 - 17:25
Bonjour,

cela ressemble fort à de l'unicode...
Miembro registrado
36 mensajes
Publicado el 25,noviembre 2019 - 18:33
bonsoir,

Je viens de tester avec himpignoreLigneInvalide et himpIgnoreRubrique Vide et c'est le même résultat. Pas de ligne insérée dans la table.
Par contre quand je fais :
resOuverture=fOuvre("D:\"+sfichier,foLecture+foUnicode)

la valeur de slignelue est correct.






Est-ce que cela veut dire que le hexporteCSV crée un fichier au format unicode et que la fontion himporteTexte ne prend pas en charge les fichiers texte unicode?

Merci de vos réponse.

Christian
Miembro registrado
143 mensajes
Publicado el 26,noviembre 2019 - 16:24
Bonjour,

J'ai copié le fichier Facture.csv en "non" Unicode, et cela ne fonctionne toujours pas.

Je transmettrai ce cas au service technique....

Bon Dév

--
Yann Wagner

WHY-GemA sàrl
Miembro registrado
1.330 mensajes
Publicado el 27,noviembre 2019 - 09:17
Salut Fornari,

Tu as oublié de mettre la définition des séparateurs dans tes paramètres, hors ceux-ci ne sont pas optionnels (seul les options et la jauge sont optionnels)

Résultat> = HImporteTexte("Nom du fichier" , "Chemin complet du fichier texte" , "Liste des rubriques" , "Séparateurs" [, "Options" [, "Jauge"]])


Donc essaye avec ceci:

sFichier est une chaîne = "D:\Facture.csv"
sSepColonne est une chaîne = "," // Point Virgule si le séparateur décimal
sSepChaine est une chaîne = """"
sSepLigne est une chaîne = RC
sSepDecimal est une chaîne = "." // Virgule si le séparateur de colonne est un point virgule
sSepCompatibilite55 est une chaîne = Caract(127)
sSeparateurs est une chaîne = ChaîneConstruit("%2%1%3%1%4%1%5", sSepCompatibilite55, sSepColonne, sSepChaine, sSepLigne, sSepDecimal)

// le paramètre hImpOEM2ANSI est à placer si ton fichier Facture1 n'est pas Unicode
// JAUGE_Progression est un champ de type Jauge pour visualiser la progression de l'import
SI HImporteTexte(Facture1 , sFichier , "", sSeparateurs, hImpIgnorePremièreLigne + hImpOEM2ANSI + hValDéfaut + hImpIgnoreLigneInvalide, JAUGE_Progression) ALORS
Info("Import Ok.")
SINON
Erreur("Erreur lors de l'import.", "", ErreurInfo())
FIN


Bon Dev
Daryl

--
http://www.concept4u2.com
Mensaje modificado, 27,noviembre 2019 - 09:20
Miembro registrado
36 mensajes
Publicado el 27,noviembre 2019 - 10:52
Je viens de faire le test avec ton code Daryl et le soucis est le même. Pas de ligne intégrée dans la table. L'import est Ok pourtant.

Christian
Miembro registrado
1.330 mensajes
Publicado el 27,noviembre 2019 - 13:39
Salut Fornari,

C'est bizarre, je viens de faire un test et je n'ai eu aucun problème.
Pas d'erreur lors de l'exécution de HImporteTexte() et tous les enregistrements de mon fichier CSV son bien dans le fichier HFSQL
Que le séparateur soit ";" ou TAB c'est passé chaque fois correctement.

Je suis en version 24.0.140.2 - 77f

Bon Dev
Daryl

--
http://www.concept4u2.com
Miembro registrado
36 mensajes
Publicado el 28,noviembre 2019 - 11:55
Je viens de faire ce test et j'ai le même résultat

voici le code complet que j'utilise :
HExporteCSV(Facture,"D:\Facture.CSV","",",",hExpCreation)
sSepColonne est une chaîne = "," // Point Virgule si le séparateur décimal
sSepChaine est une chaîne = """"
sSepLigne est une chaîne = RC
sSepDecimal est une chaîne = "." // Virgule si le séparateur de colonne est un point virgule
sSepCompatibilite55 est une chaîne = Caract(127)
sSeparateurs est une chaîne = ChaîneConstruit("%2%1%3%1%4%1%5", sSepCompatibilite55, sSepColonne, sSepChaine, sSepLigne, sSepDecimal)

// le paramètre hImpOEM2ANSI est à placer si ton fichier Facture1 n'est pas Unicode
// JAUGE_Progression est un champ de type Jauge pour visualiser la progression de l'import
//"IDFacture";"DateFacture";"TotalHT";"TotalTTC";"NuméroInterneFacture";"IDClient";"IDCommande";"IDAdresseFacturation";"Acquittée";"TotalTVA";"SaisiPar";"SaisiLe";"Observations";"Remise";"IDModeRèglement"
SI HImporteTexte(Facture1 , "D:\Facture.CSV" , "", sSeparateurs, hImpIgnorePremièreLigne + hValDéfaut +hImpOEM2ANSI+ hImpIgnoreLigneInvalide) ALORS
Info("Import Ok.")
SINON
Erreur("Erreur lors de l'import.", "", ErreurInfo())
FIN


j'ai essayé en indiquant le nom des colonnes sur l'import et j'ai le même résultat.

Voici la description des tables facture et facture1









Voici le fichier texte qui est généré par l'export :
"IDFacture","DateFacture","TotalHT","TotalTTC","NuméroInterneFacture","IDClient","IDCommande","IDAdresseFacturation","Acquittée","TotalTVA","SaisiPar","SaisiLe","Observations","Remise","IDModeRèglement"
"1","20191112","20","30","1","1","1","1","1","10","moi","20191112","pp","0","1"
"2","20191113","50","52","2","2","1","2","0","2","mmmm","20191113","mmm","0","2"


Je ne comprend pas où se trouve le soucis.

Je développe sous windev 24 01f240077f

Merci d'avance pour votre aide

christian
Miembro registrado
1.330 mensajes
Publicado el 28,noviembre 2019 - 15:22
Salut Fornari,

Cela me semble normal maintenant que tu n'arrives pas à importer ton fichier CSV :)

1. Facture1.IDFacture => Devrait être un entier sur 8 octets
2. L'ordre des colonnes du fichier CSV ne contient pas le même ordre que celle du fichier Facture1

Exemple:
- NuméroInternedeFacture est en 5ème position alors qu'elle devrait être en 2ème position
- IDClient est en 6ème position alors qu'elle devrait être en 4ème position
- Etc.

Bon Dev
Daryl

--
http://www.concept4u2.com
Miembro registrado
36 mensajes
Publicado el 29,noviembre 2019 - 13:40
Bonjour,

J'ai refais le test avec une copie exact de la table.

Voici la description des 2 tables









Voici le code utilisé :

HExporteCSV(Facture,"D:\Facture.CSV","",",",hExpCreation)
sSepColonne est une chaîne = "," // Point Virgule si le séparateur décimal
sSepChaine est une chaîne = """"
sSepLigne est une chaîne = RC
sSepDecimal est une chaîne = "." // Virgule si le séparateur de colonne est un point virgule
sSepCompatibilite55 est une chaîne = Caract(127)
sSeparateurs est une chaîne = ChaîneConstruit("%2%1%3%1%4%1%5", sSepCompatibilite55, sSepColonne, sSepChaine, sSepLigne, sSepDecimal)

// le paramètre hImpOEM2ANSI est à placer si ton fichier Facture1 n'est pas Unicode
// JAUGE_Progression est un champ de type Jauge pour visualiser la progression de l'import
//"IDFacture";"DateFacture";"TotalHT";"TotalTTC";"NuméroInterneFacture";"IDClient";"IDCommande";"IDAdresseFacturation";"Acquittée";"TotalTVA";"SaisiPar";"SaisiLe";"Observations";"Remise";"IDModeRèglement"
SI HImporteTexte(Facture2 , "D:\Facture.csv" , "", sSeparateurs, hImpIgnorePremièreLigne + hValDéfaut +hImpOEM2ANSI+ hImpIgnoreLigneInvalide) ALORS
Info("Import Ok.")
SINON
Erreur("Erreur lors de l'import.", "", ErreurInfo())
FIN


Et toujours rien dans la table Facture2.

Merci pour votre aide.

Christian
Miembro registrado
1.330 mensajes
Publicado el 02,diciembre 2019 - 10:59
Salut Fornari,

Maintenant dans Facture2, ton identifiant est automatique (ce qui n'était pas le cas avec Facture1) du coup tu décale toutes tes valeurs de ton export et donc plus rien ne correspond.

Le fait que la structure de Facture2 est identique à Facture, n'est pas le plus important, ce qu'il faut impérativement c'est que l'ordre de tes colonnes de ton fichier CSV soit dans le même ordre que ton fichier Facture2, ou alors tu indique dans l'import l'ordre des données que tu veux avoir.

[Liste des rubriques] : chaîne de caractères (AVEC guillemets)
Liste des noms des rubriques du Fichier texte. Les noms peuvent être délimités par des simples quotes ET sont séparés par des virgules OU RC. Les noms des rubriques de type clé composées sont ignorées.
SI ce paramètre n'est pas précisé OU correspond à une chaîne vide, toutes les rubriques sont importées (sauf les clés composées) DANS l'ordre physique de Description.


Cordialement
Daryl

--
http://www.concept4u2.com
Mensaje modificado, 02,diciembre 2019 - 11:00