Хождений по строкам в файле (C#)

273
08 декабря 2017, 01:46

Есть файл "io.bin" и содержит это:

ID: 1
Current date and time (time UTC): 05.12.2017 12:09:26
Global time: 00:10:00
ID: 2
Current date and time (time UTC): 06.12.2017 13:04:19
Global time: 00:05:30
ID: 3
...

Есть код который должен найти Current date and time (time UTC): 06.12.2017 и вывести все в textBox до следующего пробела, то-есть только это:

ID: 2
Current date and time (time UTC): 06.12.2017 13:04:19
Global time: 00:05:30

Сам код:

private static string getDate, setInfo = "info";    
...
private void selectDate_Click(object sender, EventArgs e)
{
    getDate = dateTimePicker1.Text;
    foreach (string line in File.ReadLines("io.bin"))
    {
        if (line.Contains("Current date and time (time UTC): " + getDate))
        {
            //тут надо реализовать хождение по строкам, Но как это сделать?
        }
        StreamReader streamReader = new StreamReader("io.bin");
        while (setInfo != null)
        {
            setInfo = streamReader.ReadLine();
            textBox1.Text += setInfo + " \r\n";
        }
    }
}

UPD: Немного не закончил свой вопрос. Надо сделать так, чтобы эта часть кода потом подружилась с вашей реализацией

StreamReader streamReader = new StreamReader("io.bin");
        while (setInfo != null)
        {
            setInfo = streamReader.ReadLine();
            textBox1.Text += setInfo + " \r\n";
        }

То есть: программа ищет по строкам с помощью if (line.Contains("Current date and time (time UTC): " + getDate)) строкуCurrent date and time (time UTC): 05.12.2017 пропуская все остальные, затем берет и копирует целый блок (от пробела до пробела). И выводит в Text Box

ID: 2
Current date and time (time UTC): 06.12.2017 13:04:19
Global time: 00:05:30
Answer 1
var massline = File.ReadAllLines("io.bin");   
for (int i = 0; i < massline.Count(); i++)
{
    var line = massline[i];
    if (line.Contains("Current date and time (time UTC): "+ getDate))
    {
        //пример "хождения" по строкам
        Console.WriteLine(massline[i-1]);
        Console.WriteLine(massline[i]);
        Console.WriteLine(massline[i+1]);
    }
} 

С учетом upd:

var massline = File.ReadAllLines("io.bin");   
for (int i = 0; i < massline.Count(); i++)
{
    var line = massline[i];
    if (line.Contains("Current date and time (time UTC): "+ getDate))
        textBox1.Text +=massline[i-1] + " \r\n" +massline[i]  + " \r\n"+ massline[i+1];

} 
Answer 2

Как вариант с использованием LINQ

var file = @"......";
var pattern = "Current date and time (time UTC): 06.12.2017 13:04:19";  
var lines = File.ReadLines(file) // Начинаем читать файл построчно
    .SkipWhile(line => !line.Contains(pattern)) // пропускаем все строки до совпадения с паттерном
    .Skip(1) // пропускаем строку Current date and time (time UTC): 06.12.2017 13:04:19
    .TakeWhile(line => !string.IsNullOrWhiteSpace(line)) // Считывем все строки от паттерна до первой пустой строки
    .ToArray(); // материализуем коллекцию

UPD. Сложить массив строк в одну строку с сепаратором можно так:

textBox1.Text += String.Join(Environment.NewLine, lines);
READ ALSO
Почему не декодируется base64 из склеенных строк?

Почему не декодируется base64 из склеенных строк?

Доброго всем! Есть строка, которая выдает ошибку при конвертации:

255
Замена слова/подстроки в строке из Dictionary (Regex IgnoreCase?)

Замена слова/подстроки в строке из Dictionary (Regex IgnoreCase?)

ЗдравствуйтеИмеется строка, например:

390
SVG-графика (.NET, C#)

SVG-графика (.NET, C#)

Имеется xml-документ с несколькими элементами rect и lineВозможно ли получить доступ к редактированию любого из этих элементов при открытии соответствующего...

243
Список посещенных сайтов

Список посещенных сайтов

Пытаюсь сделать программу для отображения списка посещенных сайтовИдея такова, что пользователи пользуясь браузерами, все сайты сохранялись...

244