Avatar billede biohazard_666 Nybegynder
01. august 2004 - 14:01 Der er 12 kommentarer og
1 løsning

Indlæs, dekrypter, vis i listbox, igen

Hejsa...
I går fik jeg svar på mine spørgsmål omkring noget med at loade en fil ind i en listbox, nu er der opstået lidt problemer som jeg gerne vil have lidt hjælp til :)

sjh fik bixet denne kode sammen til mig i går:
Private Sub Form_Load()
Dim intFree    As Integer
Dim strLine    As String
Dim arrSplit() As String
Dim strAdr As String

  intFree = FreeFile
  Open "c:\test.txt" For Input As #intFree
    Do While Not EOF(intFree)
        Line Input #intFree, strLine
        If InStr(1, strLine, "|") Then
          arrSplit = Split(strLine, "|")

          'arrSplit(0) = Hej.lir.dk
          'arrSplit(1) = hej
          'arrSplit(2) = pass (krypteret)
          'arrSplit(3) = .lir.dk

strAdr = arrSplit(0)
strUser = arrSplit(1)
strPass = Encrypt.DeCode(Trim$(arrSplit(2)))
strDom = arrSplit(3)

          If UBound(arrSplit) = 3 Then
            List1.AddItem strAdr
          End If

        End If
    Loop
  Close #intFree
End Sub

Nu er problemet så, jeg skal have lavet det så når jeg fx har lavet en knap, og vælger en af de ting som er i listen, skal den lave en msgbox hvor den skriver det som der er valgt i listbox'en. Den skal OGSÅ skrive strUser, strPass og strDom.. Jeg har prøvet at lave det på denne måde:

Option Explicit
Public strUser As String
Public strPass As String
Public strDom As String

Private Sub Command1_Click()
MsgBox List1 & " " & strUser & " " & strPass & " " & strDom
End Sub

Men det virker ikke, da den bare skriver det sidste der er blevet lagt ind i strUser, strPass og strDom:
strUser = arrSplit(1)
strPass = Encrypt.DeCode(Trim$(arrSplit(2)))
strDom = arrSplit(3)

Den kører jo bare i en Loop, og gemmer ikke de data den får.. Jeg tror det burde kunne klares ved at gemme alle data i et Array eller lign... Håber i kan hjælpe!

/Bio
Avatar billede martin_moth Mester
02. august 2004 - 14:01 #1
Den kode du har fået fra shj gemmer ikke noget i et array, men skriver det til en listbox - og kun strAdr.

Jeg ville oprette en type i et modul, fx. module1:

Public Type FilData
  strUser As String
  strPass As String
  strDom As String
End Type

Og så oprete et array og en tæller

Dim FilArr() as FilData
Dim i as long

Og så redimme det og fylde i arrayet for hver linie der læses i shj's løkke:


If InStr(1, strLine, "|") Then
  arrSplit = Split(strLine, "|")
  strAdr = arrSplit(0)
  strUser = arrSplit(1)
  strPass = Encrypt.DeCode(Trim$(arrSplit(2)))
  strDom = arrSplit(3)
  If UBound(arrSplit) = 3 Then
    List1.AddItem strAdr
    i=i+1
    redim preserve FilArr(i)
    filarr(i).strUser = strUser
    filarr(i).strPass = strPass
    filarr(i).strDom  = strDom
  End If


Sk kan du hente det frem af arrayet når du vil. Du kan også lave et alm. array for hver variabel du vil gemme, hvis du ikke gider fedte med egne typer
Avatar billede martin_moth Mester
02. august 2004 - 14:03 #2
Tælleren i vil matche index i din listbox (måske skal i=1+i sættes ned EFTER deer er skrevet i arrayet, før at de følges ad - Det er let at teste når du har kodet det)

Så du kan jo direkte aflæse hvad der er markeret i listboxen og hente det frem af arrayet.
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 14:36 #3
Hejsa Martin

Jeg har med vilje sat den til kun at vise strAdr pga jeg har ikke brug for at vise mere. Og ja det er rigtigt at den skriver det til en listbox...

Jeg prøver lige det du har sagt..
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 14:55 #4
Hejsa..

Har fået det til at virke, men når jeg fx skriver:
Dim FilArr() as FilData
msgbox FilArr(2).strUser
kommer den med en fejl:
Run-time error '9':

Subscript out of range

/Bio
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 14:55 #5
eller det vil sige, jeg næsten har fået det til at virke :)
Avatar billede martin_moth Mester
02. august 2004 - 15:35 #6
Læs fejlbeskedden!

Den siger til dig, at der ikke er noget element i arrayet med plads nummer 2.

Husk, at VB bruger 0 som første index/plads i et array
Avatar billede martin_moth Mester
02. august 2004 - 15:41 #7
Og et tip:

Fyld data i arrayet før du forsøger at hente det frem

;-p
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 15:45 #8
filarr(i).strUser = strUser
    filarr(i).strPass = strPass
    filarr(i).strDom  = strDom

Fylder det ikk noget i array'et+? :S er lidt forvirret nu :S

Men glad for du gider hjælpe :)

Og ja, der skal helst en ting i array'et før det kan hentes ud ;)

/Bio
Avatar billede martin_moth Mester
02. august 2004 - 15:51 #9
Har du så fået løst det?

I din første kode skriver du

Dim FilArr() as FilData
msgbox FilArr(2).strUser

Og det giver naturligvis fejl, arrayet er jo tomt
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 15:55 #10
nej har ikke fået løst det da den siger 'Sub or Function not defined'... Og jeg kan ikke bruge Public FilArr() as FilData pga det er en user-define

Jeg regner med at grunden er at den nulstiller det hele når jeg skriver 'Dim FilArr() as FilData' igen... Eller hvad?
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 16:07 #11
har fået det til at virke nu :)
skulle ikke bruge Public FilArr() as FilData men Dim FilArr() as FilData :)
Sådan skal det være:

Option Explicit
Dim FilArr() as FilData

Private sub form_load()
meget kode...
End sub

Sådan skrev jeg det:

Option Explicit
Public FilArr() as FilData

Private sub form_load()
meget kode...
End sub
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 16:07 #12
så nu virker det :) tak for hjælpen, endnu en gang :o)
Avatar billede biohazard_666 Nybegynder
02. august 2004 - 16:10 #13
<-*-*-*- SPØRGSMÅL LUKKET -*-*-*->
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester