Используя построитель строк, я прочитал файл. Как мне найти, присутствует ли данная строка в файле или нет? - PullRequest
2 голосов
/ 20 марта 2012

Я прочитал файл в StringBuilder. Когда я даю строку в качестве ввода, если слово присутствует в файле, вывод должен быть истинным. Если его нет, он должен быть ложным. Как мне это сделать? Может ли кто-нибудь помочь мне с кодом? Я написал программу до здесь .. Как мне идти дальше? Большое спасибо ..:)

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("The File is read");   
            }
        }
    }
}

Ответы [ 5 ]

5 голосов
/ 20 марта 2012

Как насчет однострочника:

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

Это должно сработать:)

2 голосов
/ 20 марта 2012

В показанном вами примере - нет смысла загружать в StringBuilder в первую очередь. Вы уже возвращаете всю строку в вызове на StreamReader.ReadToEnd, так что вы также можете просто проверить, содержит ли она вашу подстроку.

StringBuilder очень полезен, если вы меняете и мутируете строку - но в этом случае вы не являетесь.

Как насчет этого:

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

Если вам определенно нужен строитель строк, то что-то вроде этого:

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);
    }
}

но в этом конкретном сценарии StringBuilder на самом деле не делает ничего полезного.

2 голосов
/ 20 марта 2012
using (System.IO.StreamReader Reader = new System.IO.StreamReader("C://myfile2.txt"))
{
      string fileContent = Reader.ReadToEnd();
       if (fileContent.Contains("your search text"))
           return true;
       else
           return false;
}
1 голос
/ 20 марта 2012

Вы можете прочитать весь файл в строку с File.ReadAllText.Обратите внимание, что при этом загружается весь файл за один раз, и, следовательно, он занимает много памяти, если он большой:

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

Если ваш needle не занимает несколько строк, вы можете перейтиwith:

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

Для этого нужно хранить только одну строку в памяти за раз и таким образом масштабировать до более крупных файлов.

0 голосов
/ 20 марта 2012

Назначьте это строке и затем проверьте, содержит ли она подстроку.

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