Toon posts:

[VB] Variabelen uit een tekstbestand laden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik via visual basic variabelen vullen door middel van een tekstbestand?

het tekstbestand ziet er als volgt uit:

Begin:

111763;behanger;joep;de;joep de behanger;lepellaan 3;4543 AB
122115;Boer;Klaas;de;Klaas de Boer;Kraai 24;2577 SW

Eind.

Nu wil ik graag dat dit in verschillende variabelen word geplaatst
dus
nummer = 111763
achternaam = behanger
voornaam = joep
etc....
Het moet er dus als echte tekst in komen te staan, niet met "" om de tekst heen.

Ik ben zelf ook al aan het zoeken geweest maar ik krijg de hele regel in 1 variabele, en dit is niet de bedoeling.

Hieronder de source die ik heb gemaakt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub KnopGo_Click()
    Dim lln As String, Achternaam As String, Roepnaam As String, Tussenvoegsel As String
    Dim Geheel, Adres, postc As String

   If lbl_lokatie.Caption <> "Geef de locatie op van het database bestand" Then
    Open lbl_lokatie.Caption For Input As #1
    Do While Not (EOF(1))
        Input #1, lln, Achternaam, Roepnaam, Tussenvoegsel, Geheel, Adres, postc
    Loop
    Close 1
   Else
    MsgBox "Fout bij het zoeken naar database. Afgebroken", vbCritical Or vbOKOnly
   End If
End Sub


Weet iemand hoe ik dit probleem moet oplossen ? _/-\o_

[ Voor 3% gewijzigd door Verwijderd op 14-05-2003 17:02 . Reden: Even in een leuk vb scherm geplaatst, ipv platte tekst :) ]


Verwijderd

waarom geen ""?
Met write kun je het er toch mooi naartoe schrijven?
Je moet de waarden scheiden door een ',' ipv. een ';'.

code:
1
2
3
1234,"Klaas","de","boer","Klaas de Boer"
1234,"Kees","de","melkboer","Kees de melkBoer"
1234,"Klaas","kaasboer","Klaas kaasBoer"

[ Voor 81% gewijzigd door Verwijderd op 14-05-2003 16:20 ]


Verwijderd

Topicstarter
ik moet dit later weer gebruiken om een script te genereren, en dat moet zonder ""
Dat script bestaat uit vaste tekst en variabele tekst die afhankelijk is van bovengenoemd tekstbestand.

Verwijderd

Je kunt in dat script met een replace-statement de tekens uit je veriabelen halen:
Visual Basic:
1
Var=Replace(Var,""","")

offtopic:
Dank je André , en ik ben er trots op. :*)

BTW, waar heb ik dat aan verdiend?

[ Voor 38% gewijzigd door Verwijderd op 14-05-2003 16:28 ]


Verwijderd

Topicstarter
In eerste instantie is dit een xls bestand.En als je via Excel een CVS maakt gebruikt hij ; ipv. , als scheidingsteken.

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Verwijderd schreef op 14 May 2003 @ 16:16:
Ik ben zelf ook al aan het zoeken geweest maar ik krijg de hele regel in 1 variabele, en dit is niet de bedoeling.
Die string kun je wel met een string.split(";") in meerdere variabelen zetten.

Verwijderd

Split functie gebruiken.

Maar waarom gebruik je niet gewoon standaard ini files met de bijbehorende API's

//edit laat maar, ik zie al dat het vanuit excel komt......

Je zou ook gebruik kunnen maken van de Mid, Left, Right en Instr functies

[ Voor 41% gewijzigd door Verwijderd op 14-05-2003 16:32 . Reden: ik zie al dat het vanuit excel komt...... ]


Verwijderd

Topicstarter
hoe moet ik dat dan in mijn code gebruiken ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Visual Basic:
1
2
3
4
5
6
Dim arrValues() as string

arrValues = Split(RegelDieJeGelezenHebtVar,";")

msgBox arrValues(0);
msgBox arrValues(1);


of

Visual Basic:
1
msgBox(Split(RegelDieJeGelezenHebtVar,";")(0))


/edit/
die tweede methode ziet er erg mooi uit maar is niet erg praktisch als je 6 dingen wilt afdrukken. De string wordt dan namelijk 6 keer opnieuwe gesplit. Bij de eerste methode wordt alles 1 keer gesplit en in een Array gegooid.

[ Voor 48% gewijzigd door RobIII op 14-05-2003 16:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Verwijderd schreef op 14 May 2003 @ 16:29:
hoe moet ik dat dan in mijn code gebruiken ?
Na het moment dat jij de string uit het bestand leest kun je hem splitten. Hoe dat precies moet kun je in elke manual vinden.

Verwijderd

je kan mid$ gebruiken:
x=1
do
l = mid$(regel$, x, 1)
if l = ";" then
naam = mid$(regel$,1,x)
exit do
end if
x=x+1
loop
x=x+1
ox = x
do
l = mid$(regel$, x, 1)
if l = ";" then
achternaam = mid$(regel$,ox,ox-x+1)
exit do
end if
x=x+1
loop
x=x+1
ox = x
do
l = mid$(regel$, x, 1)
if l = ";" then
postcode = mid$(regel$,ox,ox-x+1)
exit do
end if
x=x+1
loop
enz..........

Verwijderd

Topicstarter
okay, bedankt voor de uitleg.
Ik zal eens even zoeken of ik er nog meer info over kan vinden

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 14 mei 2003 @ 16:33:
je kan mid$ gebruiken:
<knip>
enz..........
Holy crap! Da's niet alleen ERRUG omslachtig, maar ook nog eens lelijke code ;)
Verwijderd schreef op 14 mei 2003 @ 16:16:
<knip>
Visual Basic:
1
   If lbl_lokatie.Caption <> "Geef de locatie op van het database bestand" Then
Ik zou overigens van die string een const maken, is makkelijker als je het straks moet onderhouden :P

[ Voor 43% gewijzigd door RobIII op 14-05-2003 16:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ik heb een label op mijn form waar als standaard tekst dat instaat.
Wanneer er een database is geselecteerd dan verandert die regel naar het path van die database.
Dus wanneer hij ongelijk is aan "Geef de locatie op van het database bestand" moet die code worden gedaan, en anders moet die MsgBox ervoor komen :)

ik ben nog een nooby in vb :(

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan nog zou ik die tekst dus in een const gooien, en hem op meerdere plaatsen gebruiken... Als je namelijk je label zou aanpassen in "Geef de locatie op van het database bestand." dan werkt het al niet meer (let dus op het puntje achter aan de zin)...

[ Voor 12% gewijzigd door RobIII op 14-05-2003 16:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
dat is waar maar ik had hem maar 1 keer nodig, alleen voor de controle of het script mag worden uitgevoerd en verder niet. Dus vond het niet zo nodig meteen weer een constante ervan te maken.
Maar als je het vaker nodig hebt is het inderdaad makkelijker er een constate van te maken

Verwijderd

Lijkt het me idd nog steeds handig als je van die string een constante maakt.

const dberror="Geef de locatie op van het database bestand"

jeform.load()
jelabel.caption= dberror

en

If lbl_lokatie.Caption <> dberror Then


(dberror is natuurlijk foute naam, gaat even om het idee)

-Edit-
te laat ;)

[ Voor 20% gewijzigd door Verwijderd op 14-05-2003 17:07 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als echte bitneuker moet ik je er op wijzen dat die string dus 2x in je exe staat, en dus 2x zoveel ruimte gebruikt als dat je er 1x een const van maakt. Kost niks, kleine moeite...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ik heb nu het een en ander verandert in de source en het opsplitsen van de string werkt perfect. Nu wil ik graag dat een een textbox of label de gegevens die op dat moment verwerkt worden wordt weergegeven.
Ik heb dit geprobeert met

Visual Basic:
1
lbl_llnin.Caption = arrValues(0)


De label heet dus lbl_llnin en die moet de waarde van arrValues(0)

wanneer ik het probeer te draaien krijg ik de foutmelding:

----------------
Compiler error:

Method or data member not found
-----------------
en dan wordt Caption geselecteerd weergegeven.

Weet iemand hoe ik dit kan oplossen ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Method or data member not found
Weet je zeker dat je label lbl_llnin heet? Als 'ie zegt wat ik zojuist gequote heb, dan is het OF geen label, OF het label bestaat niet...

Ik zou het overigens niet weergeven, daar wordt het rete-traag (factor 1.5 tot 10 dus!) van...
Wat je wel kunt doen als je toch wilt laten zien dattie bezig is is b.v. een progressbar gebruiken of om de 10 of 100 waardes wat displayen in je labels (gebruik daarvoor MOD <hint>)

[ Voor 53% gewijzigd door RobIII op 15-05-2003 13:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
de label heet wel zo, ik heb de naam ge copy-past dus dit is goed.
Maar een progress bar is misschien wel een snellere oplossing :)

Ik gebruik hem trouwens in deze code.
zal het misschien te maken hebben dat het gebruikt wordt in een loop ?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Cmd_Go_Click()
Dim gegevens As String
Dim arrValues() As String
   If lbl_lokatie.Caption <> dberror Then
    Open lbl_lokatie.Caption For Input As #1
    Do While Not (EOF(1))
        Input #1, gegevens
        arrValues = Split(gegevens, ";")
        lbl_llnin.Caption = arrValues(0)
        lbl_postin.Caption = arrValues(6)
    Loop
    Close 1
    Else
    MsgBox "Fout bij het zoeken naar database. Afgebroken", vbCritical Or vbOKOnly
    End If
End Sub

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
De naam ge-copy-pasted? Of het label? En weet je dat zeker? Als je het label hebt ge-copy-pasted dan heb je waarschijnlijk een label-array. Probeer dan eens het volgende:
Visual Basic:
1
lbl_llnin(0).Caption = "Test"

[ Voor 24% gewijzigd door RobIII op 15-05-2003 14:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1