VanuitVBA Gegeven in tekstbestand wijzigen

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.233
Mijn vraag sluit aan op een eerdere : http://www.helpmij.nl/forum/showthread.php/924073-Ini-bestand-voor-Access

Hypotetisch voorbeeld
In een tekstbestand staan users en paswoorden

Alain,A
Bernard, C
Chantal, C

In Access staat een formulier met een keuzelijst ('cbo_UserName)voor de users.
Ik vul die zo op:
Bedankt aan Octafish voor een eerdere tip ivm de split functie!
Line Inputvond ik op het Internet, maar wat betekent juist die "textline" en wat zijn de andere mogelijkheden?

Code:
Private Sub Form_Open(Cancel As Integer)
myFile = CurrentProject.Path & "\some info.txt"
Open myFile For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        Userdata = textline
        arr = Split(Userdata, ",")
       'cbo_UserName.AddItem Left(Userdata, InStr(1, Userdata, ",") - 1)
       cbo_UserName.AddItem ((UBound(arr)))
    Loop
Close #1
End Sub

Dan staat er een tekstvak waarin het paswoord moet worden ingevuld en een OK knop om dat paswoord te controleren en indien het correct is een ander tekstvak voor een nieuw paswoord + een knop die dat nieuwe paswoord terugschrijft in het tekstbestand beide te activeren
OK knop heb ik zo geprogrammeerd:
Code:
Private Sub cmd_OK_Click()
myFile = CurrentProject.Path & "\some info.txt"
Open myFile For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        Userdata = textline
        arr = Split(Userdata, ",")
       
        'If Left(Userdata, InStr(1, Userdata, ",") - 1) = cbo_UserName.Value Then
        If arr(LBound(arr)) = cbo_UserName.Value Then
    
    pw = Right(Userdata, Len(Userdata) - InStr(1, Userdata, ","))
    MsgBox "pw :" & pw
    pw = arr((UBound(arr)))
 
    MsgBox "pw :" & pw

  
    Exit Do
    End If
    Loop

Dit werkt.
Maar nu de vraag: als de gebruiker een nieuw paswoord intypt, hoe moet ik dat dan wegschrijven naar het tekstbestand???
 
Bedankt! Nuttige link.
Als ik het goed begrijp eerst openen voor input, ganse file in VBA variabele steken, dan replace en dan output. Wist niet dat je naar de hele file kon refereren.

Maar nu die term "textline". Is dat altijd "textline" of staat er soms iets anders? Ik dacht dat ik ergens "dataline" had zien staan?
 
In plaats van textline of dataline mag je ook reneemettrie gebruiken ;)
 
De links hebben me geholpen om de knop "Change Password" verder af te werken.
Maar ik begrijp graag wat ik doe dus nog enkele vraagjes.

  • Wanneer werk je met Freefile en wanneer gewoon met een nummer: #1? Is die Freefile nodig wanneer het maar om één tekstbestand gaat dat je altijd netjes sluit vooraleer het terug te openen?
  • Wat staat die "#" daar te doen, of meer algemeen : dit lijkt me allemaal niet VBA-achtig (gebeurt wel meer), van welke programmeereromgeving komt deze syntax?
  • Filecontent is een string. Werkt de code ook als je een tekstbestand hebt met duizenden lijnen? Is de grootte van een string in VBAbeperkt tot 255 tekens, zoals in Access?
  • En een probleem: bij de code om te vervangen wordt aan het oorspronkelijke tekstbestand onderaan een lege paragraaf toegevoegd. Dit geeft dan een fout als ik een volgende keer de keuzelijst wil voeden met de gegevens van het tekstbestand. Is daar een oplossing voor, behalve de hele inhoud te vervangen door de hele inhoud - 1?



Code:
Private Sub cmd_ChangePassword_Click()
Dim textfile As Integer, FileContent As String
textfile = FreeFile
myFile = CurrentProject.Path & "\some info.txt"
'Open the text file in a Read State
Open myFile For Input As textfile


'Store file content inside a variable
FileContent = Input(LOF(textfile), textfile)

'Clost Text File
Close textfile


'Find/Replace

FileContent = Replace(FileContent, txt_Password, txt_NewPassword, 1, 1)

'Determine the next file number available for use by the FileOpen function
textfile = FreeFile

'Open the text file in a Write State
Open myFile For Output As textfile

'Write New Text data to file
Print #textfile, FileContent


'Close Text File
Close textfile
MsgBox "done"
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan