Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2012, 11:42   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
Сообщение парсинг текста, вытащить дату

Пытаюсь из текстового файла пытаюсь изьять датоподобные строки

Код:
const
  D = ['0'..'9','.',':'];
 var TDT:TDateTime;
      F: TextFile;
      I,ix,len: Integer;
      SDT,S:string;
Код:
 while not  EOF(F) do
   begin
     SDT:='';
     Readln(F, S);  
   Len := Length(S);
    for i :=1  to Len do
    if S[i] in D then SDT:=SDT+s[i] ;
   if length(sdt)=10 then dPrint(sdt);
Перед чтением слудующей строки SDT обнуляется , но проблема в том, что в строках в которых цифр явно меньше 10 набиваются точки, и на обработку(небезопасная StrToDate) попадает примерно такой текст:
Цитата:
11....2.3..
Вложения
Тип файла: txt copy_formated.txt (17.5 Кб, 135 просмотров)
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.

Последний раз редактировалось HellMercenariess; 24.07.2012 в 11:47.
HellMercenariess вне форума Ответить с цитированием
Старый 24.07.2012, 13:27   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Там в файле даты всегда стоят в начале строки.
Код:
var d: TDateTime;
.....................
ShortDateFormat:= 'dd.mm.yyyy';
try
d:= StrToDate(copy(s[i],0,10)); //Значит это дата
except
end;
Или даты могут быть в любом месте текста?
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.07.2012, 13:25   #3
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Там в файле даты всегда стоят в начале строки.
Код:
var d: TDateTime;
.....................
ShortDateFormat:= 'dd.mm.yyyy';
try
d:= StrToDate(copy(s[i],0,10)); //Значит это дата
except
end;
Или даты могут быть в любом месте текста?
На этой упряжке ни в какие ворота не въедешь.
Вся соль в том и есть чтобы определить те строки которые в дату можно форматнуть.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 27.07.2012, 14:31   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
На этой упряжке ни в какие ворота не въедешь.
Вся соль в том и есть чтобы определить те строки которые в дату можно форматнуть.
Не нравится такой подход, как по мне вполне съедобный, то ловите строки длиной 16 байт, чтобы в соответствующих позициях были точки, пробел и двоеточие, остальные цифры, а потом все равно try и StrToDate. Или будете высчитывать нет ли там 15-го месяца или 32-го числа?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.07.2012, 14:59   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Регулярными выражениями http://regexpstudio.com/Downloads/regexpr_RU.rar
Код:
    RegExpr.Expression := '\d{2}.\d{2}.\d{4} \d{2}:\d{2}';//надеемся что нет даты типа 88.74.5947 37:86
    if RegExpr.Exec(текст_текст_текст) then
    repeat
      writeln(RegExprr.Match[0]);
    until not RegExpr.ExecNext;
Ну а потом как уже сказали через try в дату.
А можно и без try, регулярное выражение усложнить, если есть вероятность встретить не верно записанную дату.
eoln вне форума Ответить с цитированием
Старый 27.07.2012, 16:07   #6
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Регулярными выражениями http://regexpstudio.com/Downloads/regexpr_RU.rar

Ну а потом как уже сказали через try в дату.
А можно и без try, регулярное выражение усложнить, если есть вероятность встретить не верно записанную дату.
Реально полезная штука, благодарю за помощь.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг+замена текста Kapitan4ik Работа с сетью в Delphi 8 01.01.2012 22:53
Как вытащить ссылки из текста html marco.v Общие вопросы Delphi 11 17.08.2011 18:21
Отмена преобразования текста в дату yursanch Microsoft Office Excel 5 14.01.2011 13:09
парсер эксель файлов-хочу вытащить дату! kate158 Общие вопросы Delphi 6 27.10.2010 09:13
Как вытащить дату и время из биос ? sergey113 Помощь студентам 18 27.03.2009 13:34