String nach unbekannter Zahl durchsuchen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Steamy2010.

    String nach unbekannter Zahl durchsuchen

    GuMo @ all,

    ich habe folgenden Text aus einem Word - Dokument vorliegen:

    Brainfuck-Quellcode

    1. Es war auszuwerten, wie viele Adressänderungen im März
    2. 2012 durchgeführt wurden. Es sollte eine Differenzierung zwischen Makler/HVE-Adressen erfolgen.
    3. Um eine Vergleichbarkeit mit den über den Geschäftsprozess Adresse angestoßenen Änderungen herzustellen, wurden für die Auswertung nur Adressänderungen berücksichtigt, die eine VN-Beziehung betrafen. Außerdem wurden nur Änderungen berücksichtigt, die Attribute betrafen, die auch über den Geschäftsprozess Adresse geändert werden können. (so wurden z.B. Änderungen des Rentakennzeichens oder der Kundentypologie nicht berücksichtigt).
    4. Es ergaben sich folgende Werte:
    5. Adressänderungen gesamt.....................: 19.964
    6. - Makleradressen (Status 626)...............: 5.088
    7. - Änderungen im Namen/Anschriftsbereich...: 3.537
    8. - HVE und übrige Organisation...............: 14.876
    9. - Änderungen im Namen/Anschriftsbereich...: 7.784
    10. - Änderungen aus GP-Adresse...............: 3.043
    11. - Änderungen aus GP-Kraftfahrt............: 604
    12. Änderungen, die nicht den Namen/Anschriftsbereich betreffen, beziehen sich auf folgende Felder:


    Die Zahlen ändern sich monatlich. Ich möchte nun die numerischen Werte auslesen und später in eine Datenbank eintragen. Bisher habe ich den ganzen Text jeweils als String in eine Variable gesteckt.

    VB.NET-Quellcode

    1. Dim wd As New Interop.Word.Application
    2. wd.Application.Documents.Open("C:\xxx.docx")
    3. wd.Visible = True
    4. Dim str_Adressänderungen_gesamt As String = ""
    5. Dim str_Makleradressen As String = ""
    6. Dim str_Änderungen_im_Namen_Anschriftsbereich As String = ""
    7. Dim str_HVE_und_übrige_Organisation As String = ""
    8. Dim str_Änderungen_im_Namen_Anschriftsbereich2 As String = ""
    9. Dim str_Änderungen_aus_GP_Adresse As String = ""
    10. Dim str_Änderungen_aus_GP_Kraftfahrt As String = ""
    11. wd.Selection.WholeStory()
    12. str_Adressänderungen_gesamt = wd.Selection.Text
    13. str_Makleradressen = wd.Selection.Text
    14. str_Änderungen_im_Namen_Anschriftsbereich = wd.Selection.Text
    15. str_HVE_und_übrige_Organisation = wd.Selection.Text
    16. str_Änderungen_im_Namen_Anschriftsbereich2 = wd.Selection.Text
    17. str_Änderungen_aus_GP_Adresse = wd.Selection.Text
    18. str_Änderungen_aus_GP_Kraftfahrt = wd.Selection.Text


    jetzt ist meine Überlegung, das ich den String nach numerischen Werten absuche, könnt ihr mir da weiterhelfen? ?(

    Bin für jeden Tipp dankbar!!
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    Bleiben die Texte immer gleich?

    Wenn ja könntest du das Ganze so lösen:

    VB.NET-Quellcode

    1. 'Hier wird das Suchpattern definiert
    2. Dim reg As New System.Text.RegularExpressions.Regex("[0-9]+(\.[0-9]{0,4}){0,1}")
    3. 'Hier werden die Werte und der Text der Davor steht gespeichert
    4. Dim dic As New Dictionary(Of String, Decimal)
    5. 'Test-Text
    6. Dim t As String = "Hier ist der Text" & vbCrLf &
    7. "Hier eine Zahl........: 20.023" & vbCrLf &
    8. " - Hier nochmal.......: 150"
    9. 'Alle Zeilen in ein String-Array speichern
    10. Dim lines() As String = t.Split(vbCrLf.ToCharArray)
    11. 'Alle Zeilen durchlaufen
    12. For Each l As String In lines
    13. 'Wenn eine Zahl gefunden wurde
    14. If reg.Matches(l).Count > 0 Then
    15. 'den Text vor der Zahl aufbereiten und in eine Variable schreiben
    16. Dim Text As String = l.Split(":"c)(0).Replace("."c, "").Replace(" - ", "").Trim
    17. 'die Zahl als double parsen
    18. Dim Zahl As Double = Double.Parse(l.Split(":"c)(1).Trim, Globalization.NumberStyles.AllowThousands, New System.Globalization.CultureInfo("DE-de"))
    19. 'Text und Zahl in das Dictionary speichern
    20. dic.Add(Text, Zahl)
    21. End If
    22. Next
    23. 'Auslesen des Dictionarys
    24. For Each kv As KeyValuePair(Of String, Double) In dic
    25. MsgBox(kv.Key & vbTab & kv.Value)
    26. Next
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    super, herzlichen Dank für Eure bisherigen Tipps. :thumbup:

    Für alle die es interessiert, mit folgendem Code bin ich zum Ziel gelangt:

    VB.NET-Quellcode

    1. Dim temp() As String = strGanzerText.Split(vbCrLf)
    2. For i = 0 To temp.Length - 1
    3. If (temp(i).IndexOf("Adressänderungen gesamt") = 0) Then
    4. MsgBox(temp(i))Dim x() As String = temp(i).Split(":")
    5. str_Adressänderungen_gesamt = x(1)
    6. Exit For
    7. End If
    8. Next


    Dank Euch! :)
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    Hi,

    erstmal .. was muss ich da sehen, Umlaute in Variablennamen? Unmöglich! Ändere das.

    Eigentlich sollte doch folgender pattern genügen:

    Quellcode

    1. (^\s*\-\s*.*?\:\s*)([\d\.]+$)

    Das hier mit RegEx.Replace ersetzen mit ${2}.

    Oder matchen:

    Quellcode

    1. [\d\.]+$



    Ich weiß nicht wieviel Spielraum da ist (variierende Leerzeichen zum Beispiel).

    Du sagst die pattern funktionieren nicht? Sieh dir RegExOptions genauer an, damit du auch noch bisschen nachdenken musst ;)



    Link :thumbup:
    Hello World
    Ich hab dir doch nen schönen Code gschrieben, da brauchst du nur mehr darauf aufbauen.

    Aber so wie ich das sehe, willst du für jede Variable eine eigene Schleife bauen. Und das dauert um einiges länger als es eigentlich sein muss...
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    BiedermannS schrieb:

    Ich hab dir doch nen schönen Code gschrieben, da brauchst du nur mehr darauf aufbauen.

    Aber so wie ich das sehe, willst du für jede Variable eine eigene Schleife bauen. Und das dauert um einiges länger als es eigentlich sein muss...

    Link275 schrieb:

    Weil einfach, einfach zu einfach ist! :D

    ... oder eben auch nicht ^^

    Link :thumbup:



    Entschuldige, ich war vielleicht ein wenig zu übereifrig........hab die Botschaft schon verstanden und werd mich Deinem annehmen :!:

    herzlichen Dank :thumbup:
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)