Задать вопрос
@Smilleey

Как выдернуть фрагмент текста из файла?

Добрый день. Прошу помощи в решении задачи. Имеется вот такой код:
private void Button_Click(object sender, RoutedEventArgs e)
        {
            string[] subDirs = Directory.GetDirectories(Properties.Settings.Default.ATMPath);
            foreach (string subDir in subDirs)
            {
                string[] subFiles = Directory.GetFiles(subDir, "*");
                foreach (string subFile in subFiles)
                {
                    string fileContent = File.ReadAllText(subFile);
                    bool StringPresent = fileContent.IndexOf(ACCode.Text) >= 0;
                    if (StringPresent)
                    {
                        MessageBoxResult result = MessageBox.Show(subFile);
                        break;
                    }
                }
                }
        }

Ищем в файлах текст "ACCode.Text". В случае нахождения данной строки необходимо скопировать из файла фрагмент текста, который содержит в себе "ACCode.Text", находящийся между знаками +++++.
Предполагаю, что надо искать строку +++++ с IndexOf в обоих направлениях, найти IndexOf этих двух строк +++++ и получить текст между двумя индексами, но как реализовать это на практике не понимаю. Заранее спасибо за ответы.
  • Вопрос задан
  • 199 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Neuroware
@Neuroware
Программист в свободное от работы время
не уверен насчет того насколько большой фрагмент между плюсами, но решение такое:
читаем построчно, если втречаем "открывающие" плюсы начинаем писать в память каждую строку и смотреть есть ли вхождение подстроки, если есть "запоминаем" мол вхождение было (bool), идем дальше, как только встретили "закрывающие" плюсы смотрим, было ли вхождение, если было возвращаем запомненный фрагмент текста (который начали сохранять при появлении открывающих) и если вхождения не было то очищаем все что запоминали и идем искать открывающие дальше. Таким образом чтение файла идет в 1 проход, то есть ровно столько сколько нужно чтобы решить поставленную задачу. Скорость будет ограничиваться только скоростью диска, ибо весь перечисленный алгоритм крайне мало ресурсов ЦП потребляет.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Читаете файл, ищете вхождение "+++++" в прочитанном буфере, ищете вхождение "+++++" после первого найденного, выделяете часть которая между ними. В ней ищете "ACCode.Text" и если найдено - делайте что у вас задумано. В чем проблема?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы