| |
VB.NET - Ein- und UmsteigerAbhä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ß | |
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 | |
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...
| |
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.
| |
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.
| |
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 | |
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.
| |
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 | |
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 ;)
| |
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 ..... | |
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. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|