Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev
WinDev Forum d'entraide sur la programmation en WinDev
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/02/2013, 15h09   #1
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
Par défaut Import CSV dans un champ table

Bonjour à tous

Voila, j'ai besoin d'afficher dans un champ table toutes la valeur d'un fichier csv (qui peut comporter un nombre variable de colonnes).

Afficher tout dans une table n'est pas un problème, le soucis est que mes colonnes de ma tables doivent être identifiées (en gros je fais un logiciel d'e-mailling et le champ comportant les adresses emails doit être identifié comme colonne "mail" car je fais ensuite des traitements sur cette colonne, pareil pour les nom et prénoms par exemple car lors de l'envoi d'email il sera possible de remplacer une chaine "[nom]" par le nom inscrite dans ma colonne "nom").

Pour faire court lorsque l'utilisateur importe son CSV je dois savoir quel champ correspond à quelle colonne ...

Je ne sais pas si c'est clair car ce n'est pas simple à expliquer mais dans le cas contraire j'attends vos questions afin de vous éclairer au mieux.

Merci
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 15h35   #2
Hemgé
Membre chevronné
 
Homme
Inscription : octobre 2007
Messages : 320
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2007
Messages : 320
Points : 749
Points : 749
Bonjour,

Généralement, la première ligne comporte les noms de colonnes ...

Si ce n'est pas le cas, l'ordre des colonnes est-il connu et fixe ?

Hemgé
Hemgé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 16h33   #3
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
En effet je n'avais pas pensé que la première ligne comportait les libellés.
Mais comment faire pour ensuite affecter chaque valeur à la bonne colonne ?
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 18h34   #4
Hemgé
Membre chevronné
 
Homme
Inscription : octobre 2007
Messages : 320
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2007
Messages : 320
Points : 749
Points : 749
Je crois que vous devriez commencer par faire une petite recherche dans le Forum, simplement sur "CSV".

Je viens de jeter un œil.

Il y a de nombreuses discussions qui vous permettront de vous familiariser avec le sujet et d'élaborer une solution, que nous vous aiderons à mettre au point si cela est encore nécessaire.

Bon travail

Hemgé
Hemgé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 18h52   #5
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
Je vais regarder cela.

Merci beaucoup pour votre aide
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2013, 01h51   #6
laurent30s
Membre chevronné
 
Avatar de laurent30s
 
Laurent
Inscription : novembre 2007
Messages : 453
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : novembre 2007
Messages : 453
Points : 784
Points : 784
Un code que j'avais fait il y a quelques années...

Il faut une table "TABLE_MaTable" avec une colonne de type chaîne "COL_1"

Le code qui charge un fichier csv et rempli la table

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tabMontableau est un tableau de * par  * chaînes
sFichierCSV est une chaîne
sFichierCSV = fChargeTexte("D:\export.csv")
CSVVersTableau(sFichierCSV,tabMontableau,";")
nNb_Ligne est un entier = TableauInfo(tabMontableau,tiNombreLignes)
nNb_Colonne est un entier = TableauInfo(tabMontableau,tiNombreColonnes)
nNb_col_a_supprimer est un entier = TABLE_MaTable..NombreColonne
sLigne_table est une chaîne

// vide la table
TableSupprimeTout(TABLE_MaTable)

// supprime colonnes précédemment créées
POUR i = 2 A nNb_col_a_supprimer	
	ChampSupprime("TABLE_MaTable.COL_"+ i)
FIN

// crée les colonnes
TABLE_MaTable.COL_1..Libellé = tabMontableau[1,1]
POUR i = 2 A nNb_Colonne
	ChampClone({"TABLE_MaTable.COL_1",indChamp},"COL_"+i,{"TABLE_MaTable",indChamp}..NombreColonne + 1)
	{"TABLE_MaTable.COL_"+i,indChamp}..Libellé = tabMontableau[1,i]
FIN

// rempli la table
POUR i = 2 A nNb_Ligne
	sLigne_table = ""
	POUR j = 1 A nNb_Colonne
		sLigne_table += tabMontableau[i,j] + TAB
	FIN	
	sLigne_table = Gauche(sLigne_table,Taille(sLigne_table)-1)
	TableAjoute(TABLE_MaTable,sLigne_table)
FIN
__________________
Bon dev
Laurent

- C’est génial.
- Non c’est bizarre.
- Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.
laurent30s est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2013, 18h14   #7
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
Merci Laurent pour ta contribution, j'ai utilisé ton code et ça fonctionne sauf que à l'origine j'ai 2 colonnes qui devront etre par défaut dans ma table (une colonne "Activer" contenant un interupteur pour chaque ligne, et une colonne "Etat" qui affichera l'état du traitement de la ligne).

Sauf que je n'arrive pas à insérer ces deux colonnes supplémentaires...
J'ai essayé de plusieurs façons : en ajoutant mes 2 colonnes par programmation en utilisant champClone après que ton code soit éxécuté mais ça ne fonctionne pas (aucun remplissage).

J'essaye d'insérer dans la premiere ligne du tableau (donc dans les entetes) mes colonnes supplémentaires mais je n'y arrive pas, je ne sais pas comment faire.

J'avoue que je tourne un peu en rond :s
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h25   #8
laurent30s
Membre chevronné
 
Avatar de laurent30s
 
Laurent
Inscription : novembre 2007
Messages : 453
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : novembre 2007
Messages : 453
Points : 784
Points : 784
Ajoute tes 2 colonnes en dur
COL_Activer : interrupteur
COL_Etat : Chaîne
avant
COL_1 : Chaîne

Puis dans le code il faut tenir compte de ces 2 colonnes dans les colonnes à supprimer. Pour cela...
Code :
nNb_col_a_supprimer est un entier = TABLE_MaTable..NombreColonne - 2
Ça devrait marcher...
__________________
Bon dev
Laurent

- C’est génial.
- Non c’est bizarre.
- Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.
laurent30s est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2013, 20h54   #9
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
Oui j'ai fait un peu le même genre que ça et j'ai le même résultat, c'est à dire que la table est bien remplie mais le contenu ne correspond pas à la colonne.

Le fait d'avoir 2 colonnes supplémentaire décale le chargement du contenu, j'ai essayé de rajouter +2 à nNbColonne mais j'ai une erreur.
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h07   #10
laurent30s
Membre chevronné
 
Avatar de laurent30s
 
Laurent
Inscription : novembre 2007
Messages : 453
Détails du profil
Informations personnelles :
Nom : Laurent

Informations forums :
Inscription : novembre 2007
Messages : 453
Points : 784
Points : 784
Autant pour moi, il faut décaler le remplissage de la table avec 2 TAB

Code :
1
2
3
4
5
6
7
8
9
// rempli la table
POUR i = 2 A nNb_Ligne
	sLigne_table = TAB + TAB
	POUR j = 1 A nNb_Colonne
		sLigne_table += tabMontableau[i,j] + TAB
	FIN	
	sLigne_table = Gauche(sLigne_table,Taille(sLigne_table)-1)
	TableAjoute(TABLE_MaTable,sLigne_table)
FIN
En espérant que cette fois ce soit bon...
__________________
Bon dev
Laurent

- C’est génial.
- Non c’est bizarre.
- Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.
laurent30s est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/02/2013, 23h25   #11
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 115
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 115
Points : 5
Points : 5
Ha ba voila c'etait simple en fait

Un grand MERCI, pour votre aide ça m'a vraiment aidé.
C'est super sympa de faire partager votre experience

Bonne soirée
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h18.


 
 
 
 
Partenaires

Hébergement Web