2 Stimmen

Unter Verwendung eines Zeichenfolge-Builder habe ich eine Datei gelesen. Wie kann ich herausfinden, ob die angegebene Zeichenfolge in der Datei vorhanden ist oder nicht?

Ich habe eine Datei in einen StringBuilder eingelesen. Wenn ich eine Zeichenfolge als Eingabe gebe, sollte, wenn das Wort in der Datei vorhanden ist, die Ausgabe "true" sein. Wenn es nicht vorhanden ist, sollte es "false" sein. Wie mache ich das? Könnte mir jemand mit dem Code helfen? Ich habe das Programm bis hierhin geschrieben. Wie gehe ich weiter vor? Vielen Dank. :)

class Program
{
    static void Main(string[] args)
    {
        using (StreamReader Reader = new StreamReader("C://myfile2.txt"))
        {
            StringBuilder Sb = new StringBuilder();
            Sb.Append(Reader.ReadToEnd());
            {
                Console.WriteLine("Die Datei wurde gelesen");   
            }
        }
    }
}

5voto

Brian Punkte 1763

Wie wäre es mit einem Einzeiler:

 bool textExists = System.IO.File.ReadAllText("C:\\myfile2.txt").Contains("Suchtext");

Das sollte funktionieren :)

2voto

juergen d Punkte 194549
using (System.IO.StreamReader Reader = new System.IO.StreamReader("C://myfile2.txt"))
{
      string fileContent = Reader.ReadToEnd();
       if (fileContent.Contains("Ihr Suchtext"))
           return true;
       else
           return false;
}

2voto

Rob Levine Punkte 38688

In dem Beispiel, das Sie zeigen - es macht keinen Sinn, in einen StringBuilder zu laden. Sie geben bereits den gesamten String im Aufruf von StreamReader.ReadToEnd zurück, also können Sie genauso gut überprüfen, ob dieser Ihren Unterstring enthält.

StringBuilder ist sehr nützlich, wenn Sie den String ändern und verändern - aber in diesem Anwendungsfall tun Sie das nicht.

Wie wäre es damit:

private bool FileContainsString(string file, string substring)
{
    using (StreamReader reader = new StreamReader("C://myfile2.txt"))
    {
        return reader.ReadToEnd().Contains(substring);
    }
}

Wenn Sie definitiv den StringBuilder möchten, dann so etwas wie dies:

private bool FileContainsString(string file, string substring)
{
    using (StreamReader reader = new StreamReader("C://myfile2.txt"))
    {
        var sb = new StringBuilder(reader.ReadToEnd());
        return sb.ToString().Contains(substring);
    }
}

aber in diesem speziellen Szenario tut der StringBuilder tatsächlich nichts Nützliches.

1voto

CodesInChaos Punkte 103089

Sie können die gesamte Datei in einen String mit File.ReadAllText einlesen. Beachten Sie, dass dadurch die gesamte Datei auf einmal geladen wird und daher viel Speicher kostet, wenn die Datei groß ist:

string content = File.ReadAllText(@"C:\myfile2.txt");
Console.WriteLine(content.Contains("needle"));

Wenn Ihr needle nicht über mehrere Zeilen verläuft, können Sie Folgendes verwenden:

IEnumerable content = File.ReadLines(@"C:\myfile2.txt");
Console.WriteLine(content.Any(line => line.Contains("needle")));

Dies muss nur eine Zeile gleichzeitig im Speicher behalten und ist somit für größere Dateien skalierbar.

-1voto

Virus Punkte 3095

Weisen Sie das einer Zeichenfolge zu und überprüfen Sie dann, ob es die Teilzeichenfolge enthält.

dim str as string
str = sb.tostring()
if str.contains("string") then
 'code
else
 'code
end if

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X