mehrere Variablen in Datei speichern und gezielt auslesen

Terminator2

Erfahrenes Mitglied
Ich habe in meinem Programm ein paar Textfelder und will den Wert (Text) von jedem einzelnen Feld beim Schließen in eine Datei sichern. Am besten wäre es, wenn man mehrere Variablen in eine Datei bekommt.
So, wenn dies dann ausgeführt wurde, soll das Programm beim Starten automatisch die Werte aus der Datei auslesen und wieder in den Feldern anzeigen.

Mir geht es aber nur darum, wie ich mehrere Variablen in eine Datei bekomme und diese dann auch wieder einzelnd auslesen kann.

Kennt da jemand einen recht einfachen Quellcode?

mfg
Termi;)
 
Ich sagte einen recht einfachen Quellcode, und nicht ein komplettes Betriegssystem :) ;)

Ehm, kla, irgendwie ist das ne Nummer zu kompliziert für mich...

Anfänger zu sein ist echt .... nich toll

Aber ich nehme mal an, dass bestimmt schon mal jemand ein programm mit einer Ini Datei gemacht hat und mit den Quellcode posten kann, damit ich den dann einfach nur noch einfügen muss :)

Ich muss folgende Werte beim Schließen speichern und beim Öffnen wieder aufrufen:

Text1.Text bis Text8.Text
Slider1.Value
Slider2.Value
File1.Auswahl (Keine Ahnung, wie man die Auswahl speichert... - Wenn einer weiß wie, bitte posten)

Und das wars auch schon ;)

PS: Trotzdem Danke an RamonR, ist ein guter Anfang, aber zu kompliziert für mich und für die Zeit, die ich habe, bis das Programm fertig sein muss...

mfg
Termi
 
Glaub mir, mit .ini-Dateien geht es wirklich am einfachsten (außer du hast VB2005, dann kannste die Programminternen My.Settings verwenden). Falls du mir nicht glaubs, hab ich hier noch ne "Alternative" für dich, die eine ähnliche Aufgabe übernimmt (Bitte keine Kritik, ich weis wie unübersichtlich das is):

Code:
Private Sub VerarbeitungslistespeichernToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VerarbeitungslistespeichernToolStripMenuItem1.Click
        Dim sav As String
        Dim i As Int16
        If SaveSal.ShowDialog() = Windows.Forms.DialogResult.OK Then
            SaveInt()
            lis.FlNm = SaveSal.FileName
            sav = lis.FlNm & "°" & vbCrLf
            sav &= lis.SrcFile & "°" & lis.TgtFile & "°" & vbCrLf
            sav &= lis.SFrom & "°" & lis.STo & "°" & vbCrLf
            For i = 0 To 1000
                If Not lis.List1(i) = "" Then
                    sav &= lis.List1(i) & "°"
                Else
                    sav &= "°"
                End If
                If Not lis.List2(i) = "" Then
                    sav &= lis.List2(i) & "°" & vbCrLf
                Else
                    sav &= "°" & vbCrLf
                End If
                '            sav &= lis.List1(i) & "°" & lis.List2(i) & "°" & vbCrLf
            Next
            My.Computer.FileSystem.WriteAllText(lis.FlNm, sav, False, System.Text.Encoding.Default)
            '        MsgBox(sav)
            Me.Cursor = Cursors.Default
        End If
    End Sub

    Private Sub VerarbeitungslisteöffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VerarbeitungslisteöffnenToolStripMenuItem.Click
        Dim load As String
        Dim Ptr As Int64 = 0
        Dim i As Int16
        Dim temp As String
        If OpenSal.ShowDialog() = Windows.Forms.DialogResult.OK Then
            load = My.Computer.FileSystem.ReadAllText(OpenSal.FileName, System.Text.Encoding.Default)
            '        MsgBox(load)
            Ptr = InStr(load, "°") - 1
            lis.FlNm = Microsoft.VisualBasic.Left(load, InStr(load, "°") - 1)
            Ptr += 4
            lis.SrcFile = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
            Ptr += Len(lis.SrcFile) + 1
            lis.TgtFile = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
            Ptr += Len(lis.TgtFile) + 3
            lis.SFrom = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
            Ptr += Len(lis.SFrom) + 1
            lis.STo = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
            Ptr += Len(lis.STo) + 3
            For i = 0 To 1000
                temp = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
                Ptr += Len(temp) + 1
                If Not temp = "" Then
                    lis.List1(i) = temp
                Else
                    lis.List1(i) = ""
                End If
                temp = Mid(load, Ptr, InStr(Ptr, load, "°", CompareMethod.Binary) - Ptr)
                Ptr += Len(temp) + 3
                If Not temp = "" Then
                    lis.List2(i) = temp
                Else
                    lis.List2(i) = ""
                End If
            Next i
            txtSrc.Text = lis.SrcFile
            txtTgt.Text = lis.TgtFile
            txtFrom.Text = lis.SFrom
            txtTo.Text = lis.STo
            For i = 0 To 1000
                If Not lis.List1(i) = "" Then
                    cbo1.Items.Add(lis.List1(i))
                End If
                If Not lis.List2(i) = "" Then
                    cbo2.Items.Add(lis.List2(i))
                End If
            Next i
            'MsgBox(lis.FlNm & vbCrLf & lis.SrcFile & vbCrLf & lis.TgtFile & vbCrLf & lis.SFrom & vbCrLf & lis.STo & vbCrLf)
        End If
    End Sub
 
:eek: Whats that? :)

Och nee, das gibts doch nich...
Ich hab doch schon mal sowas hier programmiert, und das ist meiner Meinung nach recht einfach, da blicke ich noch ohne weiteres durch, aber langsam bekomme ich Probleme, das Programm muss fertig werden:
Code:
Dim Kanal As Integer
Kanal = FreeFile
Open "C:\Variablen.txt" For Output As #Kanal
Print #Kanal, "KW" & Right$(sKW, 2)
Close #Kanal

Das kann ich. Aber ich weiß nicht, wie man dann wieder Werte ausliest. Und außerdem muss man da für jede Variable eine eigene Textdatei machen. Das könnte ich noch verkraften, aber professionell ist das irgendwie nicht... :)

Also, mir wäre folgendes am liebsten:
Ein komplett fertiger Ini-Datei Quellcode, am besten mit meinen Variablen (s.o.) :)
Oder eine Funktion, in der man Textdateien auslesen kann (Was natürlich das einfachste ist, aber nur eine Notlösung wäre, daher lieber Ini-Datei ;) )


Vielen Dank im vorraus
 
So, melde mich nach kurzem schon wieder ;)

Habe gerade entdeckt, dass RamonR eine Beispieldatei beigefügt hat, die richtig gut ist :suspekt:

Hab mir das ganze mal in mein Prog reingefummelt und finde das nicht schlecht. Aber irgendwie klappt noch nicht alles. Das abspeichern funktioniert gut, aber das Laden nicht.

Ich poste mal meinen Quellcode, und habe noch folgende frage:
wie kann ich die Auswahl einer fileListBox abspeichern (Meinetwegen nur den ListIndex). Oder ist das schon die Funktion? Ich muss ja immer Text.Text oder Slider1.Value und so eingeben. Aber was muss ich für die Auswahl bei der File1 Box eingeben?

Aber hier erstmal der Quellcode: MainMod.bas
Code:
Option Explicit

Private Const cPath = "\variablen.ini"

Public Slider1 As Long
Public Slider2 As Long
'Public File1 As Long
Public Text1 As String
Public Text2 As String
Public Text3 As String
Public Text4 As String
Public Text5 As String
Public Text6 As String
Public Text7 As String
Public Text8 As String

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
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 GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long

Public Sub Main()
    Call Lade_Inidatei
    proTEC.Show vbModal
End Sub

Public Sub Ende()
    Dim F As Form
    
    Call MainMod.Schreibe_IniDatei
    
    For Each F In Forms
        Unload F
        Set F = Nothing
    Next F
    
    End
End Sub

Public Sub Lade_Inidatei()
    Dim Buffer1 As String * 100
    Dim Buffer2 As String * 100
    Dim Buffer3 As String * 100
    Dim Buffer4 As String * 100
    Dim Buffer5 As String * 100
    Dim Buffer6 As String * 100
    Dim Buffer7 As String * 100
    Dim Buffer8 As String * 100

    Slider1 = GetPrivateProfileInt("Slider", "Slider1", 0, App.Path & cPath)
    Slider2 = GetPrivateProfileInt("Slider", "Slider2", 1, App.Path & cPath)

    'File1 = GetPrivateProfileInt("Files", "File1", 1, App.Path & cPath)

    Call GetPrivateProfileString("Texte", "Text1", "Anzeige1", Buffer1, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text2", "Anzeige2", Buffer2, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text1", "Anzeige3", Buffer3, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text2", "Anzeige4", Buffer4, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text1", "Anzeige5", Buffer5, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text2", "Anzeige6", Buffer6, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text1", "Anzeige7", Buffer7, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text2", "Anzeige8", Buffer8, 100, App.Path & cPath)
    proTEC.Text1.Text = Trim(Buffer1)
    proTEC.Text2.Text = Trim(Buffer2)
    proTEC.Text3.Text = Trim(Buffer3)
    proTEC.Text4.Text = Trim(Buffer4)
    proTEC.Text5.Text = Trim(Buffer5)
    proTEC.Text6.Text = Trim(Buffer6)
    proTEC.Text7.Text = Trim(Buffer7)
    proTEC.Text8.Text = Trim(Buffer8)
    
End Sub

Public Sub Schreibe_IniDatei()
    WritePrivateProfileString "Texte", "Text1", CStr(Text1), App.Path & cPath
    WritePrivateProfileString "Texte", "Text2", CStr(Text2), App.Path & cPath
    WritePrivateProfileString "Texte", "Text3", CStr(Text3), App.Path & cPath
    WritePrivateProfileString "Texte", "Text4", CStr(Text4), App.Path & cPath
    WritePrivateProfileString "Texte", "Text5", CStr(Text5), App.Path & cPath
    WritePrivateProfileString "Texte", "Text6", CStr(Text6), App.Path & cPath
    WritePrivateProfileString "Texte", "Text7", CStr(Text7), App.Path & cPath
    WritePrivateProfileString "Texte", "Text8", CStr(Text8), App.Path & cPath
    
    WritePrivateProfileString "Slider", "Slider1", CStr(Slider1), App.Path & cPath
    WritePrivateProfileString "Slider", "Slider2", CStr(Slider2), App.Path & cPath
    
    'WritePrivateProfileString "Files", "File1", CStr(File1), App.Path & cPath
End Sub

Und hier Form_Load:
Code:
    Slider1.Value = MainMod.Slider1
    Slider2.Value = MainMod.Slider2
    'File1.ListIndex = MainMod.File1
    Text1.Text = MainMod.Text1
    Text2.Text = MainMod.Text2
    Text3.Text = MainMod.Text3
    Text4.Text = MainMod.Text4
    Text5.Text = MainMod.Text5
    Text6.Text = MainMod.Text6
    Text7.Text = MainMod.Text7
    Text8.Text = MainMod.Text8

Und noch die Schließen Taste:
Code:
    MainMod.Text1 = Text1.Text
    MainMod.Text2 = Text2.Text
    MainMod.Text3 = Text3.Text
    MainMod.Text4 = Text4.Text
    MainMod.Text5 = Text5.Text
    MainMod.Text6 = Text6.Text
    MainMod.Text7 = Text7.Text
    MainMod.Text8 = Text8.Text
    MainMod.Slider1 = Slider1.Value
    MainMod.Slider2 = Slider2.Value
    Call MainMod.Ende

Hoffentlich wird der Post jetz nich zu lang... :suspekt:
 
Terminator2 hat gesagt.:
Hoffentlich wird der Post jetz nich zu lang... :suspekt:

Ne, wär aber zu lang, wenn ich das jetzt alles im Zitat gelassen hätte:)

Kannste vielleicht mal genauer beschreiben, was er beim Laden falsch/nicht macht und welche von den beiden Laden-Funktionen gemeint is: form_load oder ini_load?
 
Das Problem ist folgendes:

Speichern klappt alles wunderbar. die Werte stehen hinterher in meine variablen.ini drin. Aber nun das Problem:
Beim starten des Programms (Form_load) werden die Werte gar nicht angezeigt. Anstelle davon sind alle Text Boxen leer (sonst würde Text1 usw drin stehn) und meine Schieberegler (Slider) stehen auf dem Wert 0.
Das mit der File List Box krieg ich auch nicht hin, weil ich nicht weiß, wie der Wert der auswahl genannt wird (Value oder ListIndex oder sonst was).

Das sind die konkreten Fragen, auf die ich eine Antwort suche :) ;)
 
Hallo,

sorry, dass ich mich länger nicht mehr um den Thread gekümmert habe, aber ich genieße gerade meinem Urlaub. ;-)

Aber zurück zum Thema:

Terminator2 hat gesagt.:
Und hier Form_Load:
Code:
    Slider1.Value = MainMod.Slider1
    Slider2.Value = MainMod.Slider2
    'File1.ListIndex = MainMod.File1
    Text1.Text = MainMod.Text1
    Text2.Text = MainMod.Text2
    Text3.Text = MainMod.Text3
    Text4.Text = MainMod.Text4
    Text5.Text = MainMod.Text5
    Text6.Text = MainMod.Text6
    Text7.Text = MainMod.Text7
    Text8.Text = MainMod.Text8

Wenn ich das richtig sehe, fehlt im FormLoad-Ereignis der Aufruf für die Lade_Inidatei-Funktion. Daher sind Deine Variablen beim Umladen in die Steuerelemente alle leer, da die Werte aus der Ini-Datei noch nicht geladen wurden.

Also:

FormLoad:
Code:
    call MainMod.Lade_Inidatei()    
    Slider1.Value = MainMod.Slider1
    Slider2.Value = MainMod.Slider2
    'File1.ListIndex = MainMod.File1
    Text1.Text = MainMod.Text1
    Text2.Text = MainMod.Text2
    Text3.Text = MainMod.Text3
    Text4.Text = MainMod.Text4
    Text5.Text = MainMod.Text5
    Text6.Text = MainMod.Text6
    Text7.Text = MainMod.Text7
    Text8.Text = MainMod.Text8
 
Zuletzt bearbeitet:
Hi,

Gut, das Laden klappt jetz halbwegs, aber eben nur halbwegs:
Die Slider stellen sich jetzt immer richtig ein, nur die Textfelder bleiben leer, obwohl in der Ini Datei Werte drin standen...

Und das Problem mit der FileListBox besteht immer noch
:-(
 
Zurück