Multiline opslaan in ini bestand

Status
Niet open voor verdere reacties.

Doofenshmirt

Gebruiker
Lid geworden
3 nov 2011
Berichten
222
Hoi,

Ik wil graag een tekst uit een textbox opslaan in een ini bestand .
Dat gaat , zie tut van Joz1.

MAAAAR ik kan geen multiline van een textbox opslaan ?
Er staan een stuk of 4 of 8 namen in .

Hoe doe ik dit .:confused:
 
Ik ken de code van joz niet zo, maar er zijn verschillende manieren:

- Ander formaat bestand zoals XML (ok, beetje overkill)
- Section headers gebruiken (bestand anders parsen)
- Aantal keren dezelfde key meegeven (bestand anders parsen)
- Zelf een scheidingsteken bedenken en de enters vervangen door dat teken, vervolgens bij inlezen je teken weer vervangen door enters.

Oplossing 4 is vaak het makkelijkst als je begint. Oplossing 2+3 gebruik ik zelf vaak voor kleine zaken vanwege leesbaarheid, oplossing 1 voor echt veel data.

Tekens die je kunt gebruiken zijn dingen als @#$%^* etc.

methode 2, 3 en 4 even verder toelichten:

Stel je hebt dit in je listbox / textbox:

Henk
Jan
Klaas

Methode 2:

Code:
[section textbox]
Henk
Jan
Klaas

[section andere dingen]

alles onder de section textbox wordt dus gewoon overgenomen. handig voor echt grote secties en veel text.

oplossing 3:

Code:
textbox=Henk
textbox=Jan
textbox=Klaas
Links=5
Rechts=7
Boven = 3
...

Voordeel van deze methode is dat je informatie op een willekeurige locatie kan staan in je bestand. Je moet echter het bestand dus wel correct doorlopen en goed omgaan met keys die meerdere keren voorkomen

methode 4

Code:
textbox=Henk%Jan%Klaas
 
Het wil niet erg lukken.

Ik krijg steeds maar 1 naam tevoorschijn

Dit is mijn code
Code:
  Public Class IniFile

        Private Declare Ansi Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
             ByVal lpKeyName As String, _
             ByVal lpDefault As String, _
             ByVal lpReturnedString As System.Text.StringBuilder, _
             ByVal nSize As Integer, _
             ByVal lpFileName As String) _
         As Integer

        Private Declare Ansi Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
             ByVal lpKeyName As String, _
             ByVal lpString As String, _
             ByVal lpFileName As String) _
        As Integer

        Public Property Path As String

        ''' <summary>
        ''' IniFile Constructor
        ''' </summary>
        ''' <param name="IniPath">The path to the INI file.</param>
        Public Sub New(ByVal IniPath As String)
            _Path = IniPath
        End Sub

        ''' <summary>
        ''' Read value from INI file
        ''' </summary>
        ''' <param name="section">The section of the file to look in</param>
        ''' <param name="key">The key in the section to look for</param>
        Public Function ReadValue(ByVal section As String, ByVal key As String) As String
            Dim sb As New System.Text.StringBuilder(255)
            Dim i = GetPrivateProfileString(section, key, "", sb, 255, Path)
            Return sb.ToString()
        End Function

        ''' <summary>
        ''' Write value to INI file
        ''' </summary>
        ''' <param name="section">The section of the file to write in</param>
        ''' <param name="key">The key in the section to write</param>
        ''' <param name="value">The value to write for the key</param>
        Public Sub WriteValue(ByVal section As String, ByVal key As String, ByVal value As String)
            WritePrivateProfileString(section, key, value, Path)
        End Sub

    End Class

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ini As New IniFile(My.Application.Info.DirectoryPath & "\printen.ini")
        Form2.TextBox1.Text = ini.ReadValue("marjan", "hand")
        Form2.TextBox2.Text = ini.ReadValue("marjan", "been")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = Form2.TextBox1.Text
    End Sub
 
welke methode probeer je te gebruiken? Overigens ben je op deze manier aangewezen op manier 4 en heb je een limiet van 255 tekens.
 
Hoi wampier,

Dit lijkt me wel een mooie manier nr 4 .
Het is voor de rest niet zoveel data

Code:
Henk%Jan%Klaas

Wat doen die tekens dan, kan ik die veranderen in een enter ?
 
Ja dat kan, dat is het idee ;)

Code:
Form2.TextBox1.Text = Replace(ini.ReadValue("marjan", "hand"), "%", Chr(13))

zo, bijvoorbeeld. Natuurlijk moet je voor het wegschrijven naar de ini file wel het omgekeerde doen. Dat is iets gecompliceerder, maar nog ongevver hetzelfde:

Replace(Replace(TextBox1.Text, Chr(13), "%"), Chr(10), "")
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan