Avatar billede bambus Nybegynder
14. november 2001 - 15:41 Der er 9 kommentarer og
1 løsning

Indlæsning af data i listview fra txt-file (vba)

Jeg har i vba et listview, hvor jeg skal indlæse data fra en txt file. Foruden mit listitem har jeg også 3 subitems det skal indlæses.
Indtil nu bruger jeg koden

Private Sub CommandButton1_Click()
    Rownr = 0
    Open \"C:\\vbalist\\slu.txt\" For Input As #1
        Do While EOF(1) = False
        Rownr = Rownr + 1
            Line Input #1, MyMatrix(Rownr)
        Loop
    Close #1

    For i = 1 To Rownr
        With ListView1.ListItems.Add(, , MyMatrix(i))
        End With
    Next i
End Sub

Jeg ønsker, at lave en komma separerede txt fil, hvor så mine subitems indlæses i listviewet….
Men jeg er strandet her….

Noget som

Private Sub CommandButton1_Click()
    Rownr = 0
    Listnr = 0
    Open \"C:\\vbalist\\slu.txt\" For Input As #1
        Do While EOF(1) = False
        Rownr = Rownr + 1
            Line Input #1, MyMatrix(Listnr, Rownr)
        Loop
    Close #1

    For i = 1 To Rownr
        With ListView1.ListItems.Add(, , MyMatrix(i))
        End With
    Next i
End Sub

?????
Avatar billede bennytordrup Nybegynder
14. november 2001 - 15:45 #1
Private Sub CommandButton1_Click()
    dim sBuf() as string
    Rownr = 0
    Listnr = 0
   
    Open \"C:\\vbalist\\slu.txt\" For Input As #1
        Do While EOF(1) = False
        Rownr = Rownr + 1
            Line Input #1, MyMatrix(Listnr, Rownr)
        Loop
    Close #1

    For i = 1 To Rownr
        sbuf = split(mymatrix(i, \",\")
        With ListView1.ListItems.Add(, , sbuf(0))
          .subItems(1) = sbuf(1)
          .subItems(2) = sbuf(2)
          .subItems(3) = sbuf(3)
        End With
    Next i
End Sub
Avatar billede bambus Nybegynder
14. november 2001 - 15:58 #2
jeg må smutte nu... ser på det i morgen :)))
Avatar billede bambus Nybegynder
15. november 2001 - 08:09 #3
hmmm vba kender ikke funktionen split
Avatar billede bennytordrup Nybegynder
15. november 2001 - 08:20 #4
Ups... Jeg er vant til VB 6 :-/

Her er et par implementationer, du kan bruge. Indsæt dem i et modul. Join er modparten til Split.

\' Define the mighty Join function for VB5
Function Join(vaSourceArray As Variant, _
              Optional vsDelimiter As Variant) As String
    Dim i As Long
    If IsMissing(vsDelimiter) Then vsDelimiter = \" \"
    For i = LBound(vaSourceArray) To UBound(vaSourceArray) - 1
        Join = Join & vaSourceArray(i) & vsDelimiter
    Next
    Join = Join & vaSourceArray(i)
End Function

\' VB5 users get a better Split than Split (except Compare parameter ignored)
Function Split(sExpression As String, _
              Optional Delimiters As Variant, _
              Optional Limit As Variant, _
              Optional Compare As VbCompareMethod) As Variant
    Dim sToken As String, avsRet() As Variant, c As Long
    Dim sDelimiters As String
    If IsMissing(Delimiters) Then Delimiters = sWhiteSpace
    sDelimiters = Delimiters
    If IsMissing(Limit) Then Limit = -1
    \' Ignore the user\'s pitiful request for case-sensitivity
    \' (actually left as an exercise for the reader)
    Compare = vbBinaryCompare
    \' Error trap to resize on overflow
    On Error GoTo SplitResize
    \' Break into tokens and put in an array
    sToken = GetToken(sExpression, sDelimiters)
    Do While sToken <> sEmpty
        If Limit <> -1 Then If c >= Limit Then Exit Do
        avsRet(c) = sToken
        c = c + 1
        sToken = GetToken(sEmpty, sDelimiters)
    Loop
    \' Size is an estimate, so resize to counted number of tokens
    If c Then ReDim Preserve avsRet(0 To c - 1) As Variant
    Split = avsRet
    Exit Function
   
SplitResize:
    \' Resize on overflow
    Const cChunk As Long = 20
    If Err.Number = eeOutOfBounds Then
        ReDim Preserve avsRet(0 To c + cChunk) As Variant
        Resume              \' Try again
    End If
    ErrRaise Err.Number    \' Other VB error for client
End Function
Avatar billede bambus Nybegynder
15. november 2001 - 08:31 #5
Jeg får fejlen :
Automation type not supported i VB
i første linie af Split funktionen.. :(
Avatar billede bennytordrup Nybegynder
15. november 2001 - 08:38 #6
Prøv at ændre funktionshovedet til

Function Split(sExpression As String, _
              Delimiters As string =\"\", _
              Limit As long = -1, _
              Compare As VbCompareMethod = vbbinarycompare) As string()
   
Fjern test på IsMissing(X)
Avatar billede bambus Nybegynder
15. november 2001 - 08:43 #7
Arrh syntax error øv
Avatar billede bennytordrup Nybegynder
15. november 2001 - 08:55 #8
Den her har jeg kunnet compile i en Access 2000 database (godt nok i Access 2002)

Option Compare Database

Private Declare Function StrSpn Lib \"SHLWAPI\" Alias \"StrSpnW\" (ByVal psz As Long, ByVal pszSet As Long) As Long
Private Declare Function StrCSpn Lib \"SHLWAPI\" Alias \"StrCSpnW\" (ByVal lpStr As Long, ByVal lpSet As Long) As Long

Private Declare Sub CopyMemory Lib \"kernel32\" Alias \"RtlMoveMemory\" (Destination As Any, Source As Any, ByVal Length As Long)

Private Const sEmpty = \"\"

Function GetToken(sTarget As String, sSeps As String) As String
   
    \' If SHLWAPI.DLL not available, delegate to Basic-only GetToken
\'    If fNoShlWapi Then
\'        GetToken = GetTokenO(sTarget, sSeps)
\'        Exit Function
\'    End If
   
    \' Note that sSave, pSave, pCur, and cSave must be static between calls
    Static sSave As String, pSave As Long, pCur As Long, cSave As Long
    \' First time through save start and length of string
    If sTarget <> sEmpty Then
        \' Save in case sTarget is moveable string (Command$)
        sSave = sTarget
        pSave = StrPtr(sSave)
        pCur = pSave
        cSave = Len(sSave)
    Else
        \' Quit if past end (also catches null or empty target)
        If pCur >= pSave + (cSave * 2) Then Exit Function
    End If
   
    \' Find start of next token
    Dim pNew As Long, c As Long, pSeps As Long
    pSeps = StrPtr(sSeps)
    c = StrSpn(pCur, pSeps)
    \' Set position to start of token
    If c Then pCur = pCur + (c * 2)
   
    \' Find end of token
    c = StrCSpn(pCur, pSeps)
    \' If token length is zero, we\'re at end
    If c = 0 Then Exit Function
   
    \' Cut token out of target string
    GetToken = String$(c, 0)
    CopyMemory ByVal StrPtr(GetToken), ByVal pCur, c * 2
    \' Set new starting position
    pCur = pCur + (c * 2)

End Function

Function Split(sExpression As String, _
              Optional Delimiters As Variant, _
              Optional Limit As Variant, _
              Optional Compare As VbCompareMethod) As Variant
    Dim sToken As String, avsRet() As Variant, c As Long
    Dim sDelimiters As String
    If IsMissing(Delimiters) Then Delimiters = sWhiteSpace
    sDelimiters = Delimiters
    If IsMissing(Limit) Then Limit = -1
    \' Ignore the user\'s pitiful request for case-sensitivity
    \' (actually left as an exercise for the reader)
    Compare = vbBinaryCompare
    \' Error trap to resize on overflow
    On Error GoTo SplitResize
    \' Break into tokens and put in an array
    sToken = GetToken(sExpression, sDelimiters)
    Do While sToken <> sEmpty
        If Limit <> -1 Then If c >= Limit Then Exit Do
        avsRet(c) = sToken
        c = c + 1
        sToken = GetToken(sEmpty, sDelimiters)
    Loop
    \' Size is an estimate, so resize to counted number of tokens
    If c Then ReDim Preserve avsRet(0 To c - 1) As Variant
    Split = avsRet
    Exit Function
   
SplitResize:
    \' Resize on overflow
    Const cChunk As Long = 20
    If Err.Number = eeOutOfBounds Then
        ReDim Preserve avsRet(0 To c + cChunk) As Variant
        Resume              \' Try again
    End If
    Err.Raise Err.Number
End Function
Avatar billede bambus Nybegynder
15. november 2001 - 09:20 #9
Ja okay jeg arbejder i Excel97 (stadig ingen held)
Det er dog en mulighed, at indlæse data fra txt-filen ind i excel og så derefter ind i listview.
(med en tab-separerede liste)
jeg er nok nødt til, at skaffe mig en rigtig vb6 på dene computer, alt ander er lidt for omstændigt!!  eller hvad??????
Avatar billede bambus Nybegynder
19. juni 2002 - 15:06 #10
slut
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