Springen naar inhoud


- - - - -
VB6

Een Textfile Lezen Met Listbox En Data Weergeven In Textbox



  • Log in a.u.b. om te beantwoorden
Er zijn 6 reacties in dit onderwerp

#1 houthalen

houthalen

    Senior Developer

  • Leden
  • PipPipPip
  • 157 berichten
    Laatst bezocht 01 apr 2017 08:58

Geplaatst op 22 juni 2016 - 08:25

Dag
Na vele, eigen pogingen , en ook bij een ander forum,
hoop ik hier een oplossing te krijgen voor  mijn probleem.

Ik heb op het form:
1 listbox
een text1

Deze code leest een textfile(Test.txt)
waar de data in dit format is:

Titel TAB Getal
bv:
Lentestraat TAB 10
Dus de titel wordt weergegen in de listbox en de getal in text1
Tot hier alles ok

Ik wil nu de textfile zo wijzigen

Kat TAB Wit en Zwart

dus Kat in listbox selecteren
Wit en Zwart in text1
Code:
Private Sub Form_Load()
ipos = -1
Dim bestand As Long
Dim lijn As String
Dim textAndValue() As String
List1.Clear
bestand = FreeFile
Open App.Path & "\Test.txt" For Input As #bestand
Do While Not EOF(bestand)
Line Input #bestand, lijn
If Len(lijn) Then
textAndValue = Split(lijn, vbTab)
If UBound(textAndValue) = 1 Then
List1.AddItem textAndValue(0)
List1.ItemData(List1.NewIndex) = textAndValue(1)
End If
End If
Loop
Close #bestand
End Sub
Private Sub List1_Click()
If List1.ListIndex >= 0 Then
Text1.Text = List1.ItemData(List1.ListIndex)
End If
End Sub

Hoe kan ik doen?
dank u

#2 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 30 jan 2017 23:38

Geplaatst op 22 juni 2016 - 20:33

Je zou een array kunnen maken waar je de teksten in bewaart.

Code:
dim teksten() as string
dim aantalTeksten as int

Iedere keer als je een tekst uitleest, voeg je de tekst toe, en zet je de index in List1.ItemData

Code:
aantalTeksten = aantalTeksten + 1
redim preserve teksten(aantalTeksten)
teksten(aantalTeksten - 1) = textAndValue(1)


en in het click event:

Code:
Text1.Text = teksten(List1.ItemData(List1.ListIndex))

Zoiets, heb geen VB6 om te testen. Stap toch eens over naar de 21e eeuw!

#3 houthalen

houthalen

    Senior Developer

  • Leden
  • PipPipPip
  • 157 berichten
    Laatst bezocht 01 apr 2017 08:58

Geplaatst op 22 juni 2016 - 20:45

Dag Joske

Bedankt voor uw reactie.

Ik wil wel uw  idee zeker testen maar...een ding is mij niet duidelijk
de code dat  u voorstelt moet ik integreren in mijn code of niet?
Want zoals u ziet werk ik met een textfile en andere variabel
dank u

#4 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 30 jan 2017 23:38

Geplaatst op 22 juni 2016 - 23:12

Ja, samenvoegen met uw code. Net als het numerologie topic. Lukt wel, toch?

De ItemData wordt als indexer gebruikt.

#5 houthalen

houthalen

    Senior Developer

  • Leden
  • PipPipPip
  • 157 berichten
    Laatst bezocht 01 apr 2017 08:58

Geplaatst op 23 juni 2016 - 07:56

Ik heb deze nacht vele combinatie/samenvoegen  geprobeerd maar krijg ik steeds
error 9
Subscript out of range onder de click
Code:
Private Sub List1_Click()
Dim teksten() As String
If List1.ListIndex >= 0 Then

Text1.Text = List1.ItemData(List1.ListIndex)
Text1.Text = teksten(List1.ItemData(List1.ListIndex))
End If
End Sub



Hierbij een van de (vele) combinatie die ik  gebruikt heb.
Dus ook de volledig code.
Code:
Private Sub Form_Load()
ipos = -1
On Error Resume Next
Dim teksten() As String
Dim aantalTeksten As Integer
Dim bestand As Long
Dim lijn As String
Dim textAndValue() As String
List1.Clear
bestand = FreeFile
Open App.Path & "\Tenca.txt" For Input As #bestand
Do While Not EOF(bestand)
Line Input #bestand, lijn
If Len(lijn) Then
textAndValue = Split(lijn, vbTab)
If UBound(textAndValue) = 1 Then
List1.AddItem textAndValue(0)
List1.ItemData(List1.NewIndex) = textAndValue(1)
aantalTeksten = aantalTeksten + 1
ReDim Preserve teksten(aantalTeksten)
teksten(aantalTeksten - 1) = textAndValue(1)

End If
End If
Loop
Close #bestand
End Sub

Private Sub List1_Click()
Dim teksten() As String
If List1.ListIndex >= 0 Then

Text1.Text = List1.ItemData(List1.ListIndex)
Text1.Text = teksten(List1.ItemData(List1.ListIndex))
End If
End Sub


ik heb dus geprobeerd  uw code te verplaatsen over de code  maar wil  het niet lukken.
Waar is het best plek om te voegen, dan?

#6 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 30 jan 2017 23:38

Geplaatst op 23 juni 2016 - 21:35

dim teksten() buiten de subs plaatsen.

En dit klopt ook niet:

List1.AddItem textAndValue(0)  
List1.ItemData(List1.NewIndex) = textAndValue(1)  
aantalTeksten = aantalTeksten + 1  
ReDim Preserve teksten(aantalTeksten)  
teksten(aantalTeksten - 1) = textAndValue(1)

Moet zoiets worden:

Code:
List1.AddItem textAndValue(0)  
aantalTeksten = aantalTeksten + 1  
ReDim Preserve teksten(aantalTeksten)  
teksten(aantalTeksten - 1) = textAndValue(1) 

List1.ItemData(List1.NewIndex) = aantalTeksten - 1



#7 houthalen

houthalen

    Senior Developer

  • Leden
  • PipPipPip
  • 157 berichten
    Laatst bezocht 01 apr 2017 08:58

Geplaatst op 23 juni 2016 - 22:37

Het werkt !!!!
Fantastisch,  Josk !

Hartelijk bedankt voor de oplossing en voor de moetje

Een paar dagen geleden had ik (bijna) opgegeven.

Het is (door u ) opgelost .

Nogmaals bedankt.

Houthalen.
Het definitief, werkende code is:
Code:
Dim teksten() As String
Private Sub Form_Load()
ipos = -1
On Error Resume Next

Dim bestand As Long
Dim lijn As String
Dim textAndValue() As String
List1.Clear
bestand = FreeFile
Open App.Path & "\Test.txt" For Input As #bestand
Do While Not EOF(bestand)
Line Input #bestand, lijn
If Len(lijn) Then
textAndValue = Split(lijn, vbTab)
If UBound(textAndValue) = 1 Then

List1.AddItem textAndValue(0)
aantalTeksten = aantalTeksten + 1
ReDim Preserve teksten(aantalTeksten)
teksten(aantalTeksten - 1) = textAndValue(1)

List1.ItemData(List1.NewIndex) = aantalTeksten - 1
End If
End If
Loop
Close #bestand
End Sub

Private Sub List1_Click()
If List1.ListIndex >= 0 Then
Text1.Text = List1.ItemData(List1.ListIndex)
Text1.Text = teksten(List1.ItemData(List1.ListIndex))
End If
End Sub

ps. het mooi is dat nu, de textfile mag  getallen EN string bevatten!





Ook met taq VB6 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VB6] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)