vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Abhängigkeiten in If und For each abfragen 
Autor: Undertaker17
Datum: 14.04.14 18:54

Hallo zusammen,
ein Teil meines Programms sieht so aus:

 
For Each blackcount As String In Blacklist
    If text.Contains(blackcount) Then
       tslBlack.Text = blackcount
       tslEingangzeit.Text = TimeOfDay
          If modAllgemeinHaupt.Diaganz = True Then
             msg = ""
             text = ""
          Else
             For Each whitecount As String In Whitelist
                If text.Contains(whitecount) Then
                   entfernt = text.Remove(0, Zeichenentfernen)
                   txtMeldung.Text = entfernt
                   txtMeldung.Select(Len(txtMeldung.Text), 0)
                   tslStichwort.Text = whitecount
                   tslEingangzeit.Text = Now
                   IO.File.AppendAllText("C:\Protokoll.txt", text)
                   msg = ""
                   text = ""
                End If
             Next whitecount
          End If
       Next blackcount
Wie man sieht, ist dessen aufgabe, Abfragen aus 2 Listen zu generieren.

Wenn der String text ein Stichwort aus der Blacklist enthält, soll NICHTS angezeigt werden, wenn der String kein Stichwort aus der Blacklist, dafür aber aus der Whitelist enthält dann schon.

Nun hab ich aber aufgrund der Momentanen architektur das Problem, dass mitunter Trotzdem Text angezeigt wird, wenn ein Schwarzes Wort angezeigt wird.

Es ist mit sicherheit eine Totale kleinigkeit, aber ich steh total auf dem Schlauch, also wie könnte ich das ganze umbauen, dass das nicht mehr Passiert?

Danke schonmal

gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Manfred X
Datum: 14.04.14 20:01

Da kann ich nur raten ....

        For Each blackcount As String In Blacklist
            If Text.Contains(blackcount) Then
                tslBlack.Text = blackcount
                tslEingangzeit.Text = TimeOfDay
                If modAllgemeinHaupt.Diaganz = True Then
                    msg = ""
                    text = ""
                End If
            Else
                For Each whitecount As String In Whitelist
                    If text.Contains(whitecount) Then
                        entfernt = text.Remove(0, Zeichenentfernen)
                        txtMeldung.Text = entfernt
                        txtMeldung.Select(Len(txtMeldung.Text), 0)
                        tslStichwort.Text = whitecount
                        tslEingangzeit.Text = Now
                        IO.File.AppendAllText("C:\Protokoll.txt", text)
                        msg = ""
                        text = ""
                    End If
                Next whitecount
            End If
        Next blackcount
    End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Undertaker17
Datum: 14.04.14 20:10

Hallo Manfred X,

Also selbst auf den 2. Blick kann ich keinen Unterschied zum Geposteten Code erkennen, bis auf das hinzugefügte End Function am ende...

Hab es jetzt mal so versucht:

        For Each blackcount As String In Blacklist
            If text.Contains(blackcount) Then
                b = 1
            Else
                b = 0
            End If
        Next blackcount
 
        For Each whitecount As String In Whitelist
            If text.Contains(whitecount) Then
                w = 1
            Else
                w = 0
            End If
        Next
 
        If b = 1 And w = 1 Then
            text = ""
            msg = ""
        ElseIf b = 1 And w = 0 Then
            text = ""
            msg = ""
        ElseIf b = 0 And w = 1 Then
            txtMeldung.Text = text
            text = ""
            msg = ""
        Else
            text = ""
            msg = ""
        End If
Sicherlich eine Etwas Brachiale Methode, und wie zu erwarten, hat es leider nicht funktioniert...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Manfred X
Datum: 14.04.14 20:18

Dann ist vielleicht noch ein dritter Blick nötig.

Oder: Erkläre genauer was Du erreichen willst und
entferne aus dem Code alle lokal für die Problemkennzeichnung
nicht benötigten Codeteile.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Undertaker17
Datum: 14.04.14 20:28

For Each blackcount As String In Blacklist
    If text.Contains(blackcount) Then
         'Hier etwas tun
          Else
             For Each whitecount As String In Whitelist
                If text.Contains(whitecount) Then
                 'Tu hier etwas
                End If
             Next whitecount
          End If
       Next blackcount
Blacklist:
Dies
eine
nur

Whitelist:
Testmeldung
zwecke
Darstellung

Dies ist eine Testmeldung nur zum zwecke der Darstellung

Nun möchte ich diese Testmeldung Ausschließlich dann Anzeigen lassen, wenn eines der WL- Stichworte aber KEINES der BL- Worte enthalten ist. Wenn beide vertreten sind, soll nichts passieren, wenn nur Schwarz oder keines von beiden enthalten ist, soll nichts getan werden.

Nach meinem Code aber werdem z.T. auch Strings angezeigt, wenn beide enthalten sind.








Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Manfred X
Datum: 14.04.14 20:33

Vielleicht so...

        Dim IsInBlack, IsInWhite As Boolean 'Init = false
 
        For Each blackitem As String In blacklist
            If text.Contains(blackitem) Then IsInBlack = True : Exit For
        Next
 
 
        For Each whiteitem As String In whitelist
            If text.Contains(whiteitem) Then IsInWhite = True : Exit For
        Next
 
        If Not IsInBlack AndAlso IsInWhite Then
            '..............
        End If
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Undertaker17
Datum: 14.04.14 20:56

Wow klasse sache das ist genau das was ich gesucht hab!!

Sehr cool!

Jetzt sollte ich nur noch wissen, wie ich die Strings blackitem und whiteitem in der If abfrage nocheinmal abfrage.

        For Each blackitem As String In blacklist
            If text.Contains(blackitem) Then IsInBlack = True : Exit For
        Next
 
 
        For Each whiteitem As String In whitelist
            If text.Contains(whiteitem) Then IsInWhite = True : Exit For
        Next
 
        If Not IsInBlack AndAlso IsInWhite Then
            'z.B:
            MsgBox "Whiteitem"
        End If
Weil wenn ich das so wie oben abfrage kommt nur der Fehler:

Fehler 1 "whiteitem" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

bzw. wenn ich innerhalb der For each den String nochmals in eine Variable packe, kommt der Fehler:

Warnung 1 Die zwischenspeicher-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Manfred X
Datum: 14.04.14 21:14

Du mußt den Geltungsbereich der Auflistungs-Variablen
erweitern, so daß sie auch nach dem Durchlaufen der Schleife
jeweils noch gültig sind.
    Dim IsInBlack, IsInWhite As Boolean
    Dim blackitem As String = "", whiteitem As String = ""
 
    For Each blackitem In blacklist
        If text.Contains(blackitem) Then IsInBlack = True : Exit For
    Next
 
 
    For Each whiteitem In whitelist
        If text.Contains(whiteitem) Then IsInWhite = True : Exit For
    Next
 
    If Not IsInBlack AndAlso IsInWhite Then
       Dim it As String = whiteitem
    End If
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Undertaker17
Datum: 14.04.14 21:20

Perfekt ich danke dir vielmals für die hilfe!

Euch allen noch einen Schönen Montag abend ;)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: ErfinderDesRades
Datum: 15.04.14 02:04

Undertaker17 schrieb:
Zitat:

Nun möchte ich diese Testmeldung Ausschließlich dann Anzeigen lassen, wenn eines der WL- Stichworte aber KEINES der BL- Worte enthalten ist.
na, das kannst du doch genau so runterschreiben:
if whitelist.Any(addressof text.Contains) andalso not blacklist.Any(addressof _
  text.Contains) then messagebox.show(text)

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Abhängigkeiten in If und For each abfragen 
Autor: Manfred X
Datum: 15.04.14 07:18

Hallo!

Wenn Du den gesamten Thread liest, stellst Du fest, daß
auch ermittelt werden soll, welche Substrings aus "Text" in Blacklist/Whitelist
jeweils vorhanden sind und es soll wohl auch eine Fallunterscheidung getroffen
werden, die die separate Beurteilung beider Listen erfordert.

Dein Beispiel wäre deshalb zu überarbeiten .....
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Demo: Suche nach Worten 
Autor: Manfred X
Datum: 15.04.14 10:15

Wenn es nicht um die Prüfung von Substrings in einer Zeichenfolge,
sondern um die Ermittlung von Worten in einem Text geht, empfiehlt
sich eine Routine, die den zu durchsuchenden Text zunächst in
einzelne Worte spaltet, etwa so:
''' <summary>Suche im Text nach dem Listenindex des ersten Wortes, 
'''  das in der Wortliste enthalten ist</summary>
''' <param name="Text">zu durchsuchender Text</param>
''' <param name="SplitStrings">"Trennzeichen zwischen den Worten im Text</param>
''' <param name="wordlist">Liste mit Worten, nach denen zu suchen ist</param>
''' <param name="Ignorecase">Groß-/Kleinschreibung bei Suche ignorieren?</param>
''' <returns>Listen-Index des ersten gefundenen Wortes (oder -1) </returns>
Public Function IndexOfWord(ByVal text As String, _
                            ByVal wordlist As Collections.Generic.List(Of _
                            String), _
                   Optional ByVal SplitStrings() As String = Nothing, _
                   Optional ByVal Ignorecase As Boolean = False) As Integer
 
    'Eingaben prüfen
    If wordlist Is Nothing OrElse wordlist.Count = 0 Then Return -1
    If String.IsNullOrEmpty(text) Then Return -1
 
    If SplitStrings Is Nothing OrElse SplitStrings.Count = 0 Then
       SplitStrings = {" "} 'Default-Trennzeichen zwischen Worten
    End If
 
    'Text und Wortliste für den internen Gebrauch umsetzen
    Dim ilist As New Collections.Generic.List(Of String)
    Dim itext As String = ""
 
    If Ignorecase Then
       itext = text.ToLower
       For i As Integer = 0 To wordlist.Count - 1
          ilist.Add(wordlist(i).ToLower)
       Next i
    Else
       itext = text
       ilist = wordlist       
   End If
 
   'Worte im Text anhand der Trennzeichen ermitteln
   Dim iwords As New Collections.Generic.List(Of String) _
        (itext.Split(SplitStrings, StringSplitOptions.RemoveEmptyEntries))
 
   'die Worte im Text prüfen
   Dim idx As Integer
   For Each wrd As String In iwords
       'Suche nach dem Wortlisten-Index von wrd
       idx = ilist.IndexOf(wrd)
       If idx > -1 Then Return idx 'wrd gefunden
   Next wrd
 
   Return -1 'kein Wort aus dem Text in der Wort-Liste gefunden
End Function


Beitrag wurde zuletzt am 15.04.14 um 10:35:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel