[VB 6.0] .INI uitlezen.

Pagina: 1
Acties:

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 19-07 22:30
Ik heb een bestand MIX.ini genaamd, en daarin staat het volgende:
code:
1
2
[Main]
Site=Tweakers

Om dit uit te lezen gebruik ik het volgende stukje code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Dim RtnStr As String
Dim sRetVal As String
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

Function ReadINI(Section As String, Name As String)
RtnStr = Space(255)
sRetVal = GetPrivateProfileString(Section, Name, "0", RtnStr, 255, App.Path & "\" & "MIX.ini")

'Hier komt zometeen nog een stukje code

ReadINI = RtnStr
End Function

Private Sub Form_Load()
Label1.Caption = ReadINI("Main", "Site") & " .net"
End Sub


Dit werkt op zich wel, alleen valt het stukje ".net" weg.
Dit is te verhelpen door te zorgen dat er geen spatie achter de ReadINI komt te staan, dus moet ik RtnStr = Space(255) veranderen in RtnStr = Space(8 ) Want Tweakers bestaat uit 8 letters. Maar dan krijg ik dus weer een probleem als ik eenn woord met meer of minder tekens uit ga lezen, Dus heb ik deze regels toegevoegd:
Visual Basic .NET:
1
2
RtnStr = Space(sRetVal)
sRetVal = GetPrivateProfileString(Section, Name, "0", RtnStr, 255, App.Path & "\" & "MIX.ini")
(sRetval Geeft het aantal tekens waaruit de gelezen waarde bestaat.)
Maar dan wordt elke waarde dus eigenlijk 2 x maal uitgelezen, waardoor m'n programma dus trager wordt, is hier een oplossing voor?

[Edit]
Code tag aangepast, en 8) verandert in 8 )
En sorry voor de f*cked up layout.

[ Voor 23% gewijzigd door NielsNL op 19-05-2003 00:08 ]

M'n Oma is een site aan het haken.


  • Jerry
  • Registratie: September 2001
  • Laatst online: 24-03 16:08

Jerry

Who?

Ik kan niet echt ontdekken wat er precies mis is aan de code, maar misschien ipv de spaties andere characters toevoegen :?

btw zo heb ik het gedaan een tijdje geleden en het werkt goed :)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function GetIniValue(ByVal section As String, KeyName As String) As String
    Dim lreturn As Long
    Dim s
    Dim sNull As String

    'Set sNull
        sNull = Chr$(0)

    'Fill inivalue with 60x "*"
        IniValue = String$(60, "*")

    'Get string out of INI-file
        lreturn = GetPrivateProfileString(section, KeyName, "", IniValue, Len(IniValue), App.Path)

    'Split the string @ "*"
        s = Split(IniValue, "*")

    'Delete the Null trailer
        IniValue = Replace(s(0), sNull, "")

    'Return value
        GetIniValue = IniValue
End Function

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09-2025

BdR

TV is gooder then books

in de source van mijn moviescreensaver (:*)) heb ik ook zoiets net als Mr_UnAnimouS gemaakt. Dus een functie die als input alleen <sectie> en <key> heeft en dan de waarde terug geeft.

Dus zoiets
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function ReadFromINI(ByVal Section As String, ByVal ParamName As String, ByVal strFileName As String)

Dim sData As String
Dim lDataLen As Long

sData = Space$(255) ' Allocate space for the string

lDataLen = GetPrivateProfileString(Section, ParamName, "", sData, Len(sData), strFileName)

ReadFromINI = Left$(sData, lDataLen)

End Function

..

IniPathFile = "c:\test.ini"
strLeesWaarde = ReadFromINI("Settings", "Mute", IniPathFile)

strLeesWaarde wordt gevuld met "yes" als de inhoud van test.ini bijvoorbeeld dit is:
[settings]
mute=yes

edit:
ik denk dat het te maken heeft met feit dat de topic starter de terug ontvangen string nog moet 'afgekappen' tot de eigenlijke lengte. Deze lengte wordt aangegeven via de returnvalue van de GetPrivateProfileString functie. Dus in code van topicstarter:
ReadINI = Left$(RtnStr, sRetVal)
in plaats van
ReadINI = RtnStr

[ Voor 29% gewijzigd door BdR op 19-05-2003 11:23 ]

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 09:43

RayNbow

Kirika <3

Je kan de RtnStr ook trimmen (met de functie Trim). Alle spaties aan het begin en het eind worden dan weggehaald.

Edit: Hmm, ik heb het net uitgeprobeerd... Trim laat dan een null teken zitten... BdR heeft dus een betere oplossing

[ Voor 35% gewijzigd door RayNbow op 19-05-2003 12:18 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 19-07 22:30
BdR, dat regeltje werkt perfect, had ik zelf kunnen verzinnen. :P
Dankjewel.

M'n Oma is een site aan het haken.