Sektionen einer .ini-Datei zählen

esdesign

Grafikdesigner
Liebe Forengemeinde,

ich speichere Daten in einer .ini-Datei.

Code:
[einsatz_MaxMustermann2]
name=Max Mustermann
straße=Musterstraße 11
postleitzahl=13254
Stadt=Musterhausen
....

nun würde ich gerne die Sektionen zählen, die mit "einsatz_" anfangen. Ist das irgendwie möglich****?

Danke schonmal,
Eikee
 

Steiner_B

Erfahrenes Mitglied
Ja natürlich ist das möglich: Die einfachste Variante ist es den gesammten Inhalt der Datei in einen String zu laden, und diesen dann (z.B.: mit Regular Expressions) nach "[einsatz_" zu durchsuchen. Wenn du genauere Hilfe brauchst müsstest du bitte angeben in welcher Sprache du entwickelst.
 

esdesign

Grafikdesigner
Hallo Steiner_B,

das wäre echt cool, wenn Du mir da helfen könntest. Ich entwickle mit Visual Basic (V. 2010)

Danke schön,
Eikee
 

Shakie

Erfahrenes Mitglied
Wo genau liegt jetzt die Schwierigkeit? Beim Öffnen einer Datei? Oder beim Lesen einer Datei? Oder beim Zählen von Vorkommen in einem String? Ein paar mehr Infos wären hilfreich.
 

Steiner_B

Erfahrenes Mitglied
Ich würde vorschlagen du googlest mal nach "vb.net regex" oder was ähnlichem und meldest dich wieder hier wenn du ein konkretes Problem hast.
 

Nico Graichen

Erfahrenes Mitglied
Ich würde eher vorschlagen, das Persistieren der Daten nicht über Ini-Dateien zu machen sondern über Xml.
Die Abfrage der Anzahl der Datensätze ist dann ehreblich einfacher und performanter (vor allem bei vielen Datensätzen)
 

esdesign

Grafikdesigner
Hallo und danke für die Tipps.

Ich habe mittlerweile nach regex gesucht und bin auch fündig geworden.

Code:
Imports System
Imports System.Text.RegularExpressions

Public Module Test

    Public Sub Main()
        ' Define a regular expression for repeated words.
        Dim rx As New Regex("\b(?<word>\w+)\s+(\k<word>)\b", _
               RegexOptions.Compiled Or RegexOptions.IgnoreCase)

        ' Define a test string.        
        Dim text As String = "The the quick brown fox  fox jumped over the lazy dog dog."

        ' Find matches.
        Dim matches As MatchCollection = rx.Matches(text)

        ' Report the number of matches found.
        Console.WriteLine("{0} matches found in:", matches.Count)
        Console.WriteLine("   {0}", text)

        ' Report on each match.
        For Each match As Match In matches
            Dim groups As GroupCollection = match.Groups
            Console.WriteLine("'{0}' repeated at positions {1} and {2}", _ 
                              groups.Item("word").Value, _
                              groups.Item(0).Index, _
                              groups.Item(1).Index)
        Next
    End Sub
End Module

Diesen Code fand ich im Internet unter http://msdn.microsoft.com/de-de/lib...arexpressions.regex.aspx#inheritanceContinued

Nun habe ich diesen Code mal ein wenig abgeändert und nun sieht er so aus:

Code:
       Dim rx As New Regex("[einsatz_", _
               RegexOptions.Compiled Or RegexOptions.IgnoreCase)
        Dim text As String = System.IO.File.ReadAllText(p_Protokoll)
        Dim matches As MatchCollection = rx.Matches(text)
        tb_Einsatznummer.Text = matches.Count

Mein Problem ist, dass er keinen Fehler ausgibt und auch keinen Wert :(

Was mache ich falsch****? Ich danke schonmal im Vorraus.4

Eikee
 

Steiner_B

Erfahrenes Mitglied
Hallo,

Zwei Fragen: Was war der Eingabetext bei dem du nichts gefunden hast, und zweitens: Findest du was wenn du die "[" am Anfang deines Suchstrings weglässt ([ ist ein reserviertes Zeichen bei regular Expressions).
 

Steiner_B

Erfahrenes Mitglied
Ja schon klar, aber kannst du bitte den Inhalt der Datei hier posten, damit wir mal sehen welche Daten dein Programm verarbeitet? Sonst ist es schwer zu sagen warum du nichts findest.