www.mikrocontroller.net

Forum: PC-Programmierung VB.net INI-Datei auslesen


Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich möchte bei einem VB.net projekt die Daten aus einer INI-Datei 
auslesen (Ich weiss, dass diese Variante veraltet ist...!). Wie ich sie 
schreibe, weiss ich, doch habe ich noch nirgends gefunden, wie ich 
geziehlt auslesen kann...

Hoffe ihr könnt mir helfen!

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du bis Samstag warten kannst, dann kann ich dir ein Modul geben. 
Komme gerade nicht daran.

Gruß 900ss

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre sehr nett. Kann ohne Problem bis Samstag warten.
Vielen Dank schon im voraus!

Gruss Dexter

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du in VB.Net auch Systemfunktionen aus der Win32-API aufrufen 
kannst, dann kannst Du mit den Win32-API-Funktionen

  ReadPrivateProfileString

und

  ReadPrivateProfileInt

lesend auf *.INI-Dateien zugreifen.

Autor: Stahl Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versucht mal:
Public Declare Function FUN_lngGetPrivateProfileString Lib "kernel32" 
Alias "GetPrivateProfileStringA"(ByVal lpApplicationName As String, 
ByVal lpKeyName As String, ByVal lpDefault As String, ByVal 
lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As 
String) As Integer

Public Function FUN_strReadIniStr(ByVal i_strSection As String, ByVal 
i_strKeyName As String, ByVal i_strDefault As String, ByVal i_strFile As 
String) As String
  Dim lngSize As Integer
        Dim strValue As String = ""

        Try
            If Len(i_strSection) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strSection is 
empty")
            End If
            If Len(i_strKeyName) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strKeyName is 
empty")
            End If
            If Len(i_strFile) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strFile is 
empty")
            End If

            strValue = 
"----------------------------------------------------------------------- 
----"
            lngSize = FUN_lngGetPrivateProfileString(i_strSection, 
i_strKeyName, "", strValue, Len(strValue), i_strFile)

            If lngSize > 0 Then
                strValue = Left(strValue, lngSize)
            Else
                strValue = i_strDefault
                If Len(i_strDefault) > 0 Then
                    'FUN_lngWritePrivateProfileString(i_strSection, 
i_strKeyName, i_strDefault, i_strFile)
                End If

            End If

            FUN_strReadIniStr = strValue

        Catch ex As System.Exception
            'SUB_Fehler(ex)
            Return strValue
        End Try

    End Function

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das funktioniert schon sehr gut :D
vielen dank!

Ich habe nur noch eine Frage...:
Ich möchte bei einer ListBox der Index auswählen, welcher als letztes 
ausgewählt wurde. Somit speichere ich den Zahlenwert in einer INI-Datei. 
Beim nächsten start wird die Zahl ausgelesen und der ListBox als 
Selected.Index zugewiesen. Ich habe es so gemacht aber es geht nicht:

        ListBox.SelectedIndex = 
CInt(FUN_lngGetPrivateProfileString(...))

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dex Dexter wrote:
> ...der ListBox als Selected.Index zugewiesen.
>    ListBox.SelectedIndex = CInt(FUN_lngGetPrivateProfileString(...))

Was jetzt: Selected.Index oder .SelectedIndex ?

Schau doch mal, was FUN_lngGetPrivateProfileString(...) liefert, und was 
CInt() daraus macht.
Und auch was passiert, wenn Du ListBox.SelectedIndex (oder 
Selected.Index ?) direkt eine Zahl zuweist.

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was jetzt: Selected.Index oder .SelectedIndex ?
Macht das einen Unterschied? (bin ziemlich Anfänger...)

> Schau doch mal, was FUN_lngGetPrivateProfileString(...) liefert, und was
> CInt() daraus macht.
Beides liefert den Wert 1, obwohl in der INI eine 0 steht...

> Und auch was passiert, wenn Du ListBox.SelectedIndex (oder
> Selected.Index ?) direkt eine Zahl zuweist.

es ist ListBox.SelectedIndex. Wenn ich 0 zuweise erscheint in der 
Auswahl 3, obwohl die Liste mit "New" geladen wurde.



Noch kurz erklärt wie ich die Liste lade:
Ich habe eine Liste, welche an der Anzahl der Einträge ändern kann. Die 
anzahl der Items habe ich ind die INI-Datei geschrieben. Dabei habe ich 
auch in der INI-Datei unter den Key 1 bis Anzahl Items die Namen der 
Items. So lade ich die Items mit einer For-Schlaufe:

        nVersion = CInt(FUN_lngGetPrivateProfileString("operating", "versions", "1", sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))

        For i As Integer = 1 To nVersion
            ListBox.Items.Add(FUN_lngGetPrivateProfileString("operating", i, "", sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))
        Next



Beispiel der INI-Datei:
[operating]
versions=2
1=New
2=Versuch
[select]
select=0

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast wohl etwas falsch verstanden.

FUN_lngGetPrivateProfileString() liefert Dir die Länge des gefundenen 
Wertes.
also so verwenden:
nLen = FUN_lngGetPrivateProfileString(...

Der Wert selber steht in sValue, wobei sValue immer maximal lang ist.
Davon musst Du nur die gültigen Zeichen herauslesen:
sValue.Substring(0, nLen)

Ausserdem muss der Schlüssel immer ein String sein, also i.ToString 
statt nur i angeben.

Also:
nLen = CInt(FUN_lngGetPrivateProfileString("operating", "versions", "1", 
_
sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))
nVersion = CInt(sValue.Substring(0, nLen))

Im Loop:
nLen = FUN_lngGetPrivateProfileString("operating", i.ToString, "", _
sValue, Len(sValue), Application.StartupPath & "\Settings.ini")
ListBox.Items.Add(sValue.Substring(0, nLen))

sValue muss so definiert werden:
Dim sValue As String = "                       " 'genügend Platz

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt macht das ganze langsam Sinn :D
Vielen Dank für eure Hilfe. Momentan habe ich den Durchblick.
Melde mich wieder wenn ich anstehe...

@900ss D.
Wenn es möglich ist, wäre ich trotzdem froh um dein Modul.

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dex Dexter wrote:

> @900ss D.
> Wenn es möglich ist, wäre ich trotzdem froh um dein Modul.

So ein Mist, es war wohl etwas früh en morgen. Ich habe solch ein Modul 
für C# und nicht für VB.NET. Sorry, dass ich dir da Hoffnung gemacht 
habe.
grummel

Gruß 900ss

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sorry, dass ich dir da Hoffnung gemacht
> habe.
Halb so schlimm! Habe ja jetzt eine Möglichkeit, die funktioniert! ;)
nochmals vielen Dank an alle!

Gruss Dexter

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.