PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Importer un fichier txt avec sélection colonne
Importer un fichier txt avec sélection colonne
Débuté par guest, 30 jan. 2006 23:28 - 7 réponses
Posté le 30 janvier 2006 - 23:28
Salut tout le monde,

Je cherche à importer un fichier txt avec un reclasser des colonnes. C'est peut-être pas très claire, mais voiçi un exemple :

Fichier txt (séparateur ";") : produit.txt
gencode;référence;désignation;PU;quantité

Ma Table
gencode|désignation|référence|quantité|PU

Il y a un changement de position des colonnes de ma table. Je précise que je ne peux pas changer les positions de ma table. Je précise que je sais importer les données. Mais les reclasser, c'est un autre problème !

Comment faire pour reclasser les imports lors de l'importation ?

Merci de votre aide.
Posté le 01 février 2006 - 07:21
Bonjour
Splitter(extraire) votre fichier txt ds un tableau de structure (dynamique) et l importer selon l ordre desiré ds votre table me semble une solution adequate ...

Cordialement

Nicolas Jaillet
Posté le 01 février 2006 - 07:22
Christophe avait soumis l'idée :
Salut tout le monde,

Je cherche à importer un fichier txt avec un reclasser des colonnes. C'est
peut-être pas très claire, mais voiçi un exemple :

Fichier txt (séparateur ";") : produit.txt
gencode;référence;désignation;PU;quantité

Ma Table
gencode|désignation|référence|quantité|PU

Il y a un changement de position des colonnes de ma table. Je précise que je
ne peux pas changer les positions de ma table. Je précise que je sais
importer les données. Mais les reclasser, c'est un autre problème !

Comment faire pour reclasser les imports lors de l'importation ?

Merci de votre aide.

Bonsoir,
une idée comme cela, toute bete et sans programme compliqué !:
tu importe ton fichier .txt dans excel,
tu changes tes colonnes,
tu l'exporte en .txt
et tu le reimporte...
ça devrait le faire !

:-)
@+++


--
[Bernard Vessiot]
34980 Saint Gély du Fesc
Posté le 01 février 2006 - 08:36
Bonjour,
J'ai eut le même dans une application, pour importer des codes barres venant de nos fournisseurs. Comme chacun formate son fichier comme il l'entend, je ne pouvais pas me baser sur un format type.
Donc voici ce que j'ai fait:
1. J'importe le fichier dans une table construite dynamiquement ( champclone pour ajouter des colonnes). Les colonnes dynamiques ont pour nom Col1..Coln. Pour connaitre le nombre de colonnes, il suffit de compter les séparateurs dans la première ligne du fichier.
2. Je demande à l'utilisateur dans quelle colonne se trouve la référence fournisseur, le code barre...
3. Avec des indirection, je peux traiter les données

Frédéric.
Posté le 01 février 2006 - 18:31
Merci c'est sympa pour vos aides.

1- la solution de mettre dans xls, etc... me semble assez lourd, car c'est une manipulation régulière.
2- La solution d'une table dynamique ? c'est quoi ?

Si vous avez une meilleure explication ou un morceau de code, celà m'arrangerait.

Cordialement,
Posté le 01 février 2006 - 21:32
Merci c'est sympa pour vos aides.

1- la solution de mettre dans xls, etc... me semble assez lourd, car c'est une manipulation régulière.
2- La solution d'une table dynamique ? c'est quoi ?

Si vous avez une meilleure explication ou un morceau de code, celà m'arrangerait.

Cordialement,
Posté le 02 février 2006 - 10:28
Dans ma fenêtre d'import:
J'ai une table mémoire avec 2 colonnes: une pour le numéro de ligne, et une cachée qui me sert de "modèle".
Ensuite, pour le chargement du fichier:
IdFichier est un entier
CompteurColonne est un entier
CompteurLigne est un entier
Ligne est une chaîne
NomCol est une chaîne
NbrLig est un entier
NbrCol est un entier

// Je vérifie si le fichier demandé existe
SI PAS fFichierExiste(NomFic) ALORS
Info(ChaîneConstruit("Le fichier %1 n'existe pas",NomFic))
RepriseSaisie(NomFic)
FIN

// Je vérifie l'extension du fichier
SI Majuscule(fExtraitChemin(NomFic,fExtension)) <> ".TXT" ALORS
Info("Seuls les fichiers texte peuvent être utilisés")
RepriseSaisie(NomFic)
FIN

Sablier(Vrai)

// Je vide la table
TableSupprimeTout(TableSource)

IdFichier = fOuvre(NomFic)
SI IdFichier = -1 ALORS
Info(ErreurInfo(errMessage))
RepriseSaisie(NomFic)
FIN
Ligne = fLitLigne(IdFichier)
NbrCol = ChaîneOccurrence(Ligne,TAB) + 1

// Mise en place de la table
POUR CompteurColonne = 1 A NbrCol
// J'ajoute la colonne si besoin
SI PAS ChampExiste("tablesource.colonne" + CompteurColonne) ALORS
ChampClone("tablesource.colonne1","colonne" + CompteurColonne)
FIN

{"tablesource.colonne" + CompteurColonne}..Titre = CompteurColonne
{"tablesource.colonne" + CompteurColonne}..Visible = Vrai

FIN

TANTQUE Ligne <> EOT
// Je n'ajoute que les lignes non vides
SI Remplace(Remplace(Ligne," ",""),TAB,"") <> "" ALORS
NbrLig++
TableAjoute(TableSource,Remplace(NbrLig + TAB + Ligne,TAB + " ",TAB))
FIN
Ligne = fLitLigne(IdFichier)
FIN

fFerme(IdFichier)
Sablier(Faux)
TableAjuste(TableSource)
TableSource..AffichageActif = Vrai

Lorsque le fichier est chargé, je demande à l'utilisateur quelle donnée se trouve dans quelle colonne, avec des champs de saisie. En utilisant les indirection, je peux de la sorte retrouver les données:
Par exemple, pour retrouver un code barre dans la table:
NewCodeBarre = SansEspace({"TableSource.colonne" + CodeBarre}[NumLig])
CodeBarre est le champ de saisie dans leque est saisi le numéro de colonne contenant le code barre.

Frédéric.
Posté le 02 février 2006 - 17:16
Merci pour tout !
Je penses qu'avec tout ça je devrais pouvoir faire quelque chose.
Encore merci.