Member 14786879 Ответов: 2

Как прочитать последний столбец текстового файла и сравнить его с windows


Привет,
Я сделал программу, в которой я могу прочитать последнюю строку текстового файла, выбранного с помощью кнопки, используя диалог открытия файла.
Теперь у меня другая проблема.. Текстовый файл-это что-то вроде этого:
20/05/2020 10:46:00 --- ;другая информация, другая информация; другая информация
Как работает код для:
- Когда я нажимаю кнопку, которая читает последнюю строку текстового файла в поле rich text, он также читает первую колонку, содержащую данные и час, и сравнивает ее с данными windows, и если это не mach, он дает мне allarm?

Разве это возможно? Как должен выйти код?

Спасибо.

Что я уже пробовал:

Вот что я сделал в данный момент для чтения последней строки текстового файла:

частная асинхронного OpenFileBtn_ClickAsync недействительным(объект отправителя, EventArgs в электронной)
{
используя(диалоговое окно openfiledialog ОФД = новое диалоговое окно openfiledialog() { фильтр = "текстовые файлы|*.тхт", множественный = ложь })
{

if (ofd.ShowDialog() == DialogResult.ОК)
{
используя (что streamreader РД = новый поток streamreader(ОФД.Именем))
{
//ReaderRichTxtBox.Текст = жду РД.ReadToEndAsync();
string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
ReaderRichTxtBox.Text = lines[строки.Длина - 1];
}
}
}

}

2 Ответов

Рейтинг:
2

Richard MacCutchan

Используйте различные функции класса string, чтобы найти символы пробела и разделить строку на отдельные части. Затем вы можете преобразовать строку даты в тип даты/времени и выполнить сравнение.


Member 14786879

Не могли бы вы объяснить мне лучше, пожалуйста? В качестве примера кода

Richard MacCutchan

OriginalGriff дал это в своем решении выше.

Рейтинг:
18

OriginalGriff

Проблема двоякая: текстовые файлы не имеют "строк", и они, конечно же, не имеют "столбцов".

Хотя это может показаться неправильным - и файл.Метод ReadAllLines подразумевает, что это так - на самом деле это правда: текстовые файлы не имеют внутреннего формата, а "строки" доступны только потому, что текстовый файл содержит символы "конца строки", которые можно интерпретировать как разделительные строки. Но вы не можете "заменить строку", "вставить строку", "удалить строку" или "перейти к последней строке" с помощью текстового файла легко, потому что у них нет реальных "строк".
Аналогично, ничто в текстовом файле не принуждает столбцы, хотя можно интерпретировать "специальные символы" как разделители столбцов, они все еще имеют те же проблемы, что и строки!

Поэтому, чтобы прочитать "последнюю строку", вам нужно сначала прочитать все остальные и отбросить их.
Самый простой способ сделать это:

string[] lines = File.ReadAllLines(pathToFile);
if (lines.Length > 0)
   {
   string lastLine = lines[lines.Length - 1];
   ...
   }
А затем определите "разделитель столбцов", который является уникальным для файла yoru - ваши данные подразумевают, что ';' может использоваться, но вам нужно будет правильно проверить, чтобы быть уверенным. Если у вас есть символ разделителя столбцов, вы можете разбить последнюю строку на отдельные "столбцы":
string[] lines = File.ReadAllLines(pathToFile);
if (lines.Length > 0)
   {
   string lastLine = lines[lines.Length - 1];
   string[] columns = lastLine.Split(';');
   if (columns.Length > 0)
      {
      string lastColumn = columns[columns.Length - 1];
      ...
      }
   }


Member 14786879

Хорошо, я думаю, что у меня есть эта вещь, и тогда как я могу сравнить первый столбец с данными и часом windows?

OriginalGriff

Как только у вас есть разделенные столбцы, используйте DateTime.TryParse или DateTime.TryParseExact, чтобы преобразовать его в значение DateTime, а затем просто сравнить его.

Member 14786879

Хм, теперь я пытаюсь сделать то, что вы сказали, но если у меня есть что-то подобное в текстовом файле:
20/05/2020 13:28:00 ; прочая информация ; прочая информация
Я использую ваше решение как:
string[] lines = файл.ReadAllLines(pathToFile);
если (строки.Длина > 0)
{
строка строчка = линии[линии.Длина - 1];
string[] columns = последняя строка.Расщеплять(';');
если (столбцы.Длина > 0)
{
строка lastColumn = columns[столбцы.Длина - 3 м];
...
}
}
Но если я хочу прочитать другой текстовый файл, который имеет другую "; другую информацию", это не работает, потому что я должен исправить код как " string lastColumn = columns[columns.Длина - 4 м];"

OriginalGriff

Вам придется посмотреть на ваши текстовые файлы и придумать план, как "какие данные идут куда" - я не могу сделать это для вас, у меня нет никакого доступа к вашим файлам!

Richard MacCutchan

Зачем вы это делаете, если дата и время-это первая колонка? То есть вы получаете к нему доступ с помощью columns[0].