Nu har jag stött på problem idag läser jag in en textfil i comboboxen med följande kod. Jag är inte helt säker på vad du vill ha i comboboxen, men låt säga att det som står efter likamed-tecknet ska synas i lista och det som står före ska vara ItemData: Problemet med den lösningen är att jag skall läsa samma data fast det som är efter = tecknet. Och det läser jag med följande kod. Så här löser jag det Fungerade perfekt, precis vad jag sökte. Finns det någon möjlighet att styra vilken sektion den skall läsa ? annars får jag lägga allt i en rad det går ju fast det blir mycket att välja bland. Filen jag läser från ser ut som nedan det vore förnämligt om man kunde läsa tex bara sektion [331814] det som står före =tecknet. Då skulle det kunna bli ungefär så här. Dom sk.experterna kommer att kräkas Får tyvärr inte detta att funka, programmet fryser och man får döda det den hårda vägen. Någon ide om vad det kan vara ? Det verkar som om det blir en evig loop för datorn ställer sig på 100% cpu ända till man dödat programmet. OK, jag antar att du inte kan bestämma hur ini-filen ska se ut. Då får man köra en "fuling" som den SvenPon föreslår ;-) mmm :-) Bra lösning Åsa . Där ser man hur det kan gå om inte haspen är på.Läsa in inifil till combobox
Open App.Path & "\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, temp
ant = Len(temp)
If ant > 4 Or Not IsNull(temp) Or Not IsEmpty(temp) Then
lword = Left(temp, (ant - 1))
Combo1.AddItem lword
End If
Loop
Close #1
Det är ju från en textfil med bara ett värde per rad och inga grupperingar.
Nu skulle jag vilja läsa in samma värden fast i inifilsformat. se nedan
[331815]
2314=40
332315=557
54682316=5000
Det jag skall lägga in i comboboxen beror på det inom hakparanteserna samt fram till = tecknet och där har jag kört fast. Någon som har en lösning?
/BosseSv: Läsa in inifil till combobox
Gör om inifilen så att den har en löpande numrering:
[331815]
1=2314;40
2=332315;557
3=54682316;5000
Option Explicit
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 Function GetStringFromIni(ByVal vsIniFile As String, _
ByVal vsSection As String, ByVal vsKey As String) As String
Dim sBuffer As String
Dim lRet As Long
sBuffer = Space(1024)
lRet = GetPrivateProfileString(vsSection, vsKey, "", sBuffer, _
Len(sBuffer), vsIniFile)
GetStringFromIni = Left$(sBuffer, lRet)
End Function
Private Sub FillComboFromIni()
Dim sIniFile As String
Dim sTmp As String
Dim lIdx As Long
Dim vnt as Variant
sIniFile = "D:\Testa\MittProgram.ini"
lIdx = 1
' Läs in första raden i avsnittet
sTmp = GetStringFromIni(sIniFile, "331815", "1")
Do While sTmp <> ""
' Dela upp strängen, resultatet hamnar i arrayen vnt
vnt = Split(vnt, ";")
If UBound(vnt) = 1 Then
With Me.cboTest
.AddItem vnt(1)
.ItemData(.NewIndex) = vnt(0)
End With
End If
' Fortsätt att läsa in så länge det finns rader i avsnittet
lIdx = lIdx + 1
sTmp = GetStringFromIni(sIniFile, "331815", CStr(lIdx))
Loop
End Sub
Sv:Läsa in inifil till combobox
sR = ReadINIString("331815", "2314", "Default")
Text4.Text = sR
Det jag vill ha i comboboxen är det värde som står före = tecknet, det blir även svårt att få numrering då jag läser ut datan. Men jag skall spara ditt förslag det kan vara användbart vid ett annat tillfälle.
Mvh BosseSv: Läsa in inifil till combobox
<code>
Option Explicit
Private Sub Command1_Click()
Dim iniArray() As String
Dim tmpStr As String
Dim FNum As Long
FNum = FreeFile
Open App.Path & "\test.ini" For Input As #Fnum
On Error Resume Next
Do Until EOF(FNum)
Line Input #FNum, tmpStr
iniArray = Split(tmpStr, "=")
' innehåller allt före "="
Combo1.AddItem iniArray(0)
'vill du ha allt efter = så blir det
' Combo1.AddItem iniArray(1)
Loop
Close #FNum
End Sub
</code>
Kom igen om det skall förfinasSv:Läsa in inifil till combobox
[331814]
5698=30
2568=25000
[331815]
2314=40
2315=55
2316=10
Men detta var en bra bit på väg.
Tusen tack för er hjälp
BosseSv: Läsa in inifil till combobox
därför att jag använder <b>GoTo NextTest</b> :-) Jag bryr mig icke, just här passar det.
<code>
Private Sub Command1_Click()
Dim iniArray() As String
Dim tmpStr As String
Dim checkStr As String
Dim FNum As Long
'här skriver du eller tar in dom som får vara med
checkStr = "[331814]"
FNum = FreeFile
Open App.Path & "\test.ini" For Input As #FNum
On Error Resume Next
Do Until EOF(FNum)
Line Input #FNum, tmpStr
If InStr(tmpStr, checkStr) Then
NextTest:
Line Input #FNum, tmpStr
If InStr(tmpStr, "=") Then
iniArray = Split(tmpStr, "=")
Combo1.AddItem iniArray(0) & "="
GoTo NextTest
End If
End If
Loop
Close #FNum
End Sub
</code>Sv:Läsa in inifil till combobox
/BosseSv: Läsa in inifil till combobox
/BosseSv:Läsa in inifil till combobox
Testa detta:
Sub FillCombo
Dim sSection As String
Dim sLine As String
Dim lFile As Long
Dim bSectionFound As Boolean
Dim vnt As Variant
sSection = "[331814]"
lFile = FreeFile
Open App.Path & "\test.ini" For Input As #lFile
' Går igenom rad för rad tills rätt avsnitt hittas
Do Until EOF(lFile)
Line Input #lFile, sLine
If InStr(sLine, sSection) > 0 Then
bSectionFound = True
Exit Do
End If
Loop
' Läser in varje rad så länge de innehåller ett likamedtecken
If bSectionFound Then
Do Until EOF(lFile)
Line Input #lFile, sLine
If InStr(sLine, "=") > 0 Then
vnt = Split(sLine, "=")
Combo1.AddItem vnt(0)
Else
Exit Do
End If
Loop
End If
Close #lFile
End Sub
Sv: Läsa in inifil till combobox
Det funkade mot dom test inifiler jag testade på.
Om du kommer in i en sådan loop kommer du ur den med Break när du kör i designläge.
Funkar Åsa:s lösning ? Om inte får Vi ta en ny match.Man får aldrig ge sig.