Utiliser les valeurs d'un fichier text separé par des virgules [Résolu]

Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Dernière intervention
6 février 2009
- - Dernière réponse : retaks666
Messages postés
289
Date d'inscription
jeudi 2 janvier 2003
Dernière intervention
16 juillet 2007
- 16 janv. 2005 à 11:40
Bonjour,
voici des semaine que je cherche et malgré votre aide et tous les exemples que j'ai trouvé rien n'y fait!
j'ai un txt qui ressemble à ça :
nom1;detail1;autre1
nom2;detail2;autre2
etc....

Le but est de recuperer la valeur de la première colonne dans un list box( ou combo).
Une fois l'item selectionné, que les détails correspondant soient affichés dans 2 labels.

Au final pouvoir modifier sur une form modif ou supprimer supprimer une ligne par exemple )

je ne suis que débutant et ce qui vous parait simple me semble ...intordable !
Au secours !!!
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
3
Merci

Dim tabu As String
Dim n    As String

Private Sub Command1_Click()
    Dim NomFichier As String
    Dim Ligne      As String
    
    n = 5
    tabu = String$(n, vbTab)
    
    NomFichier = "C:\...\Fichier.txt"
    Open NomFichier For Input As #1
         While Not EOF(1)
            Line Input #1, Ligne
            Ligne = Replace(Ligne, ";", tabu)
            List1.AddItem Ligne
            Wend
         Close #1
End Sub

Private Sub List1_Click()
    Dim texte As String
    Dim x1    As Integer
    Dim x2    As Integer
    texte = List1.List(List1.ListIndex)
    x1 = InStr(1, texte, tabu) + n
    x2 = InStr(x1, texte, tabu)
    Label1 = Mid$(texte, x1, x2 - x1)
    Label2 = Mid$(texte, x2 + n)
End Sub


Daniel

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
3
Merci
Maintenant, c à toi de savoir ce que tu mets dans LigneASupprimer.

Cordialement, CanisLupus

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Messages postés
154
Date d'inscription
jeudi 22 mai 2003
Dernière intervention
6 septembre 2007
0
Merci
Salut roadrunner,

Pour déserialiser tout ça, je te proposes ceci:

i = InStr(1, Trame,";", vbTextCompare)
  
  If i <> 0 Then
    Désérialise = Left(Trame, i - 1)
    Trame = Right(Trame, Len(Trame) - i)
  End If


Avec:
Désérialise:"nom1"
Trame:detail;autre1

Eventuellement, mets un ";" en fin de trame, comme ça cette fonction fonctionnera quelque soit la position de l'information.

En espèrant avoir pu taider
Tchô ;)
AnteManoclis
Messages postés
289
Date d'inscription
jeudi 2 janvier 2003
Dernière intervention
16 juillet 2007
0
Merci
moi j'aurai fait de la sorte

public nb = 1
for  i = 1 to len(ligne)
    if mid(ligne,i,1) = ";" then
     select case nb
     case 1:
     nb = nb+ 1
      list1.additem (left(ligne, i-1))
     case 2:
     nb = nb+ 1
      list2.additem (left(ligne, i-1))
     case 3:
     nb = 0 ' si il n'y a que 3 arguments
      list3.additem (left(ligne, i-1))
next i

puis ensuite tu fait un truc du genre:
public sub afficher()
  for i = 0 to list1.listcount -1
    if list1.selected(i) = true then
    msgbox list2.list(i) & " " & list3.list(i)
  end if
  next i
end sub

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
Salut, un truc simple, testé avec ton exemple

nom1;detail1;autre1
nom2;detail2;autre2

et qui a l'air de fonctionner.

Pour tester, tu colles le code suivant dans un form contenant une listbox (list1) et 2 labels (label1 et label2).

' déclaration d'un type de tableau
Private Type matrice_tablo
  nom As String
  detail As String
  autre As String
End Type

' Tableau final
Dim tablo() As matrice_tablo

Private Sub Form_Load()
Dim nFic1 As Integer
Dim buf As String
Dim t() As String
Dim i As Integer

' On ouvre le fichier
nFic1 = FreeFile
Open "c:\temp\truc1\essai.txt" For Input As #nFic1

' on le lit
Do While Not EOF(nFic1)
  Line Input #nFic1, buf
  ' on splitte l'enreg dans un tableau intermédiaire
  t = Split(buf, ";")
  ' on redim le tableau pour réceptionner les valeurs
  ReDim Preserve tablo(i)
  ' on affecte les valeurs au tableau final
  tablo(i).nom = t(0)
  tablo(i).detail = t(1)
  tablo(i).autre = t(2)
  ' on se prépare à un nouvel enreg
  i = i + 1
Loop

Close

' on remplit la listbox ou le combo. ici c une listbox mais le principe est le même
For i = LBound(tablo) To UBound(tablo)
  List1.AddItem tablo(i).nom
Next

End Sub

Private Sub List1_Click()
  Label1.Caption = tablo(List1.ListIndex).detail
  Label2.Caption = tablo(List1.ListIndex).autre
End Sub


Bonne prog

Cordialement, CanisLupus
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Dernière intervention
6 février 2009
0
Merci
merci à Tous
Gobillot
J'ai testé les 3 methodes, la tienne est la plus simple et la plus efficace !
Merci Beaucoup !!!

Reste à trouver comment supprimer une ligne donnée.
Je cherche !

merci encore
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
0
Merci
on supprime avec l'index:
List1.RemoveItem List1.ListIndex

pour tout supprimer:
Dim i As Integer
For i = List1.ListCount - 1 To 0 Step -1
List1.RemoveItem i
Next

Daniel
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Dernière intervention
6 février 2009
0
Merci
Salut daniel,
merci pour l'info mais c'est dans le fichier texte qu'il me faut supprimer la ligne, pas dans la form.
après selection de l'item de la list >> rechercher la ligne >> supprimer

merci de ton aide
Passe de bonnes fêtes de noël
A+
Didier
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
Pour supprimer une ligne dans un fichier texte, tu n'as pas d'autre solution que de le lire puis de le réécrire sans la ligne que tu veux supprimer.

par exemple, je veux supprimer la ligne LigneASupprimer = "toto;est;petit"

dim temp as string
open fichier1 for input as #1
open fichier2 for output as #2
line input #1, temp
if temp <> LigneASupprimer then
print #2, temp
endif
close #1
close #2

Cordialement, CanisLupus
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Dernière intervention
6 février 2009
0
Merci
merci Canislupus
je vais essayer de gratter un peu autour de ça car pour l'instant si je reprend ton exemple, cela ma crée un 2eme fichier avec uniquement la valeur à supprimer.
Peut être me faut il faire l'inverse : ecrire tout sauf ça dans ce fichier, puis kill du 1er et renommer le 2eme en 1er ??
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
Dsl, il y a surement un truc ailleurs car, le code que je t'ai donné veut dire :

Lecture de chaque enreg du fichier 1
Si l'enreg est différent de la ligne que je veux supprimer, enregistrement dans le fichier 2, sinon, non.

Bien sùr, tu peux faire un kill du fichier1 et rename du fichier2 en fichier1. Je ne l'ai pas précisé car je pensais ça coulait de source.

Cordialement, CanisLupus
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Dernière intervention
6 février 2009
0
Merci
Merci à tous !
J'ai fini par tout faire comme je le voulais ! génial !
Messages postés
289
Date d'inscription
jeudi 2 janvier 2003
Dernière intervention
16 juillet 2007
0
Merci
Salut, tu peux aussi aller voir ma source base de données V2, qui
prends en charge la lecture et l'enregistrement de fichiers csv
(fichiers excel de valeurs séparées par des points virgules), ça peut
toujours être utile ;)

http://www.vbfrance.com/code.aspx?ID=28800

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.