Avatar billede flashit Nybegynder
17. april 2003 - 23:30 Der er 4 kommentarer og
1 løsning

listbox fra ini fil

Hej E.

Jeg vil gerne læse indholdet af en ini fil ind i en listbox, men ikke bare alt indholdet:

Min ini fil indeholder følgende:

[Person1]
Jakob
testvej
testby


[Person2]
Anders
andenvej
andenby


osv..

i min list box skal så stå:

Jakob
Anders

Når man vælger Jakob skal variablerne få indholder at linierne som står under navnet.

Jeg har følgende variabler:

dim navn as string
dim vej as string

nu er variablerne =

vej = testvej
by = testby

Har i nogle gode ider?
Avatar billede kabbak Professor
18. april 2003 - 00:24 #1
kan du ikke læse alle dataerne ind i et array og så overføre hver 3 til din listbox.

vej og by vil så ligge i de 2 næste.
Avatar billede flashit Nybegynder
18. april 2003 - 15:31 #2
Har du et eks. da jeg ikke er med på hvordan man får placeret indholdet iet array, og jeg ved heller ikke hvor mange poster der er i min ini fil??
Avatar billede kabbak Professor
18. april 2003 - 18:35 #3
Denne her åbner en fil for læsning og lægger hver tredie data i en listbox.
Den løber til den når enden på filen.

hvis det ikke er hver tredie du vil have ind  skal du rette denne linie.
( If Tre = 4 Then Tre = 1 )



Dim FilNummer As Integer
  Dim MinString() As String
  Dim I, Tre As Integer
  Tre = 1
  FilNummer = FreeFile
    Open "C:\Min_fil.txt" For Input As #FilNummer
  Do While Not EOF(FilNummer)
  ReDim MinString(I)
    Line Input #FilNummer, MinString(I)
    If Tre = 1 Then
    ListBox1.AddItem (I & " " & MinString(I))
    End If
    Tre = Tre + 1
    If Tre = 4 Then Tre = 1
    I = I + 1
  Loop
  Close #FilNummer
Avatar billede tjacob Juniormester
18. april 2003 - 20:54 #4
Hvis du lavede nøgler i din inifil, ville det være meget nemmere:

[Person1]
Navn=Jakob
Gade=testvej
By=testby

[Person2]
Navn=Anders
Gade=andenvej
By=andenby

OSV

Så kan du trække den nøgle ud du vil med ini-API'erne:

Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias _
  "GetPrivateProfileSectionNamesA" ( _
  ByVal lpszReturnBuffer As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias _
  "GetPrivateProfileSectionA" ( _
  ByVal lpAppName As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
  "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias _
  "WritePrivateProfileSectionA" ( _
  ByVal lpAppName As String, _
  ByVal lpString As String, _
  ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
  "WritePrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpString As Any, _
  ByVal lpFileName As String) As Long


Nu kan du trække en hvilken som helst nøgle ud f.eks. således:

Public Function ReadIniKey(ByVal strFileName As String, ByVal strSec As String, _
                          ByVal strKey As String) As String
  Dim strBuffer As String, RetLen As Long
 
  strBuffer = String(100, 0)
  RetLen = 99
  Do While (RetLen = Len(strBuffer) - 1)
    strBuffer = String(Len(strBuffer) * 2, 0)
    RetLen = GetPrivateProfileString(strSec, strKey, "", strBuffer, _
            Len(strBuffer), strFileName)
    If RetLen = 0 Then Exit Do
  Loop
   
  ReadIniKey = Left(strBuffer, RetLen)
 
End Function


Kald funktionen i f.eks. en knap:

  Dim strName As String
  strName = ReadIniKey('StiTilDinIniFil', "Person1", "Navn")

  returnerer "Jacob"

MHT valg i listbox:

-Kan du bruge den første API: GetPrivateProfileSectionNames, der returnerer alle sektionsnavne.
Dem kan du så bruge til at finde alle de andre variable.

Håber det er forståeligt, -det skulle gå hurtigt ;-)

/tjacob
Avatar billede shadowdance Nybegynder
22. april 2003 - 17:41 #5
Hvad med sådan en:


----------------------------
Private Sub readfile(IniFile As String)

Dim FSO As Object, fsoText As Object, CurLine As String
Dim Navn As String, Vej As String, By As String

Set FSO = CreateObject("scripting.filesystemobject")
Set fsoText = FSO.opentextfile(IniFile)

Do While Not fsoText.atendofstream
    CurLine = fsoText.readline
    If Mid(CurLine, 1, 1) = "[" Then 'Hvis dette er begyndelsen på en entry
        Navn = fsoText.readline
        Vej = fsoText.readline
        By = fsoText.readline
        List1.AddItem Navn
    End If
Loop

End Sub
------------------------------
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