Utiliser les valeurs d'un fichier text separé par des virgules

Résolu
roadrunner_34
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
6 février 2009
- 18 déc. 2004 à 19:30
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
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 !!!

13 réponses

cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
24 déc. 2004 à 20:36
Maintenant, c à toi de savoir ce que tu mets dans LigneASupprimer.

Cordialement, CanisLupus
3
Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
33
18 déc. 2004 à 22:46

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
1
AnteManoclis
Messages postés
154
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
6 septembre 2007

18 déc. 2004 à 20:06
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
0
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 juillet 2007

18 déc. 2004 à 23:03
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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
19 déc. 2004 à 17:11
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
0
roadrunner_34
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
6 février 2009

20 déc. 2004 à 02:34
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
0
Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
33
20 déc. 2004 à 02:47
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
0
roadrunner_34
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
6 février 2009

24 déc. 2004 à 17:06
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
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
24 déc. 2004 à 17:40
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
0
roadrunner_34
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
6 février 2009

24 déc. 2004 à 19:50
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 ??
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
24 déc. 2004 à 20:32
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
0
roadrunner_34
Messages postés
15
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
6 février 2009

16 janv. 2005 à 07:53
Merci à tous !
J'ai fini par tout faire comme je le voulais ! génial !
0
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 juillet 2007

16 janv. 2005 à 11:40
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
0