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?
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??
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
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
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
------------------------------