Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie Sätze in einer Textdatei gefunden werden, die Übereinstimmungen für jeden angegebenen Satz von Wörtern enthalten. Obwohl das Array von Suchbegriffen in diesem Beispiel hartcodiert ist, kann es auch dynamisch zur Laufzeit aufgefüllt werden. In diesem Beispiel gibt die Abfrage die Sätze zurück, die die Wörter "Historisch", "Daten" und "integriert" enthalten.
Beispiel
Class FindSentences
Shared Sub Main()
Dim text As String = "Historically, the world of data and the world of objects " &
"have not been well integrated. Programmers work in C# or Visual Basic " &
"and also in SQL or XQuery. On the one side are concepts such as classes, " &
"objects, fields, inheritance, and .NET Framework APIs. On the other side " &
"are tables, columns, rows, nodes, and separate languages for dealing with " &
"them. Data types often require translation between the two worlds; there are " &
"different standard functions. Because the object world has no notion of query, a " &
"query can only be represented as a string without compile-time type checking or " &
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " &
"objects in memory is often tedious and error-prone."
' Split the text block into an array of sentences.
Dim sentences As String() = text.Split(New Char() {".", "?", "!"})
' Define the search terms. This list could also be dynamically populated at run time
Dim wordsToMatch As String() = {"Historically", "data", "integrated"}
' Find sentences that contain all the terms in the wordsToMatch array
' Note that the number of terms to match is not specified at compile time
Dim sentenceQuery = From sentence In sentences
Let w = sentence.Split(New Char() {" ", ",", ".", ";", ":"},
StringSplitOptions.RemoveEmptyEntries)
Where w.Distinct().Intersect(wordsToMatch).Count = wordsToMatch.Count()
Select sentence
' Execute the query
For Each str As String In sentenceQuery
Console.WriteLine(str)
Next
' Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
End Class
' Output:
' Historically, the world of data and the world of objects have not been well integrated
Die Abfrage funktioniert, indem sie den Text zuerst in Sätze aufteilen und dann die Sätze in ein Array von Zeichenfolgen aufteilen, die jedes Wort enthalten. Für jedes dieser Arrays entfernt die Distinct Methode alle doppelten Wörter, und dann führt die Abfrage einen Intersect Vorgang für das Wortarray und das wordsToMatch
Array aus. Wenn die Anzahl der Schnittmengen mit der Anzahl des wordsToMatch
Arrays übereinstimmt, wurden alle Wörter in den Wörtern gefunden, und der ursprüngliche Satz wird zurückgegeben.
Im Aufruf von Split werden die Satzzeichen als Trennlinien verwendet, damit sie aus der Zeichenfolge entfernt werden können. Wenn Sie dies nicht getan haben, könnten Sie beispielsweise eine Zeichenfolge "Historisch" haben, die nicht mit "Historisch" im wordsToMatch
Array übereinstimmt. Möglicherweise müssen Sie zusätzliche Trennzeichen verwenden, je nachdem, welche Arten von Interpunktionszeichen im Quelltext enthalten sind.
Kompilieren des Codes
Erstellen Sie ein Visual Basic-Konsolenanwendungsprojekt mit einer Imports
Anweisung für den System.Linq-Namespace.