Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как найти фрагмент текста (дата)?


Страницы:   1 2

Newser ©   (2008-07-27 12:16:00) 

Дата может быть написана:
 1.06.08
11.06.08


KilkennyCat   (2008-07-28 21:38:00) [1]

Выше написано.

Я вот чего не понимаю... использование ADO, на мой взгляд, довольно-таки неплохой уровень...


Newser   (2008-07-28 20:51:00) [2]

Как организовать проверку, используя - '\d{1,2}\.\d{2}\.\d{2}' ?


Newser   (2008-07-28 20:49:00) [3]

Спасибо, Юрий Зотов !
Всё гениальное - просто ;-)

Потом я думаю сделать:
i2:=1;
while i2 < L.Count do
    begin
      "поле дата" := L[i2]
      "поле работа" := L[i2+1]
      "поле текст" := L[i2+2]
      i2:=i2+3;
 end;

Чтобы придумать с проверкой...? - проверить что дата - это дата, иначе i2:=i2+3 и continue


Медвежонок Пятачок   (2008-07-28 09:29:00) [4]

with TRegExpr.Create do
try
Expression := '(\d{1,2})\.(\d{2})\.(\d{2})';
if Execute then
 begin
  ShowMessage('день ' + Match[1] + ' месяц ' + Match[2] + ' год ' + Match[3]);
 end;
finally
Free;
end;


Юрий Зотов   (2008-07-28 00:49:00) [5]

> Newser   (27.07.08 22:06) [22]

Вот работающая без ошибок, но все равно ОЧЕНЬ плохая программа. Почему она плохая - это Вы поймете, когда начнутся глюки (а они наверняка  начнутся). Откуда эти глюки берутся и как от них избавиться - это уж Вы сами.

procedure TForm1.FormCreate(Sender: TObject);
begin
 Memo1.Text := '01.02.08 - выезд для встречи. 02.02.08 - звонок для подтверждения. 03.02.08 - звонок, попросили перенести встречу на 04.02.08. 04.02.08 - выезд по плану.'
end;

const
 WordChars =  ['А'..'Я', 'а'..'я', '0'..'9'];

procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
 L: TStringList;
 i: integer;
begin
 S := Trim(StringReplace(Memo1.Text, '. ', #13#10, [rfReplaceAll]));
 while not (S[Length(S)] in WordChars) do
   SetLength(S, Length(S) - 1);
 L := TStringList.Create;
 try
   L.BeginUpdate;
   try
     L.Text := StringReplace(S, ' - ', #13#10, [rfReplaceAll]);
     i := 0;
     while i < L.Count do
     begin
       Inc(i);
       S := Copy(L[i], 1, Pos(' ', L[i]));
       while not (S[Length(S)] in WordChars) do
         SetLength(S, Length(S) - 1);
       L.Insert(i, S);
       Inc(i, 2)
     end
   finally
     L.EndUpdate
   end;
   Memo1.Lines.Assign(L)
 finally
   L.Free
 end
end;


palva   (2008-07-28 00:14:00) [6]


> Подскажите хоть как индекс первого символа даты получить?

MatchPos, MatchLen


Newser   (2008-07-27 22:06:00) [7]

> Сергей М. ©   (27.07.08 18:51) [20]
Отчасти я понимаю! Но это всё - хождение вокруг, да около!
Подскажите хоть как индекс первого символа даты получить?


Правильный$Вася   (2008-07-27 20:26:00) [8]


> Дата может быть написана:  1.06.08 11.06.08

я не понял - это написание одной и той жедаты?!


Сергей М.   (2008-07-27 18:51:00) [9]


> 1. Мне нужно найти №п.п. символа, с которого начинается
> сообщение - это дата


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

См. св-во TRerExpr.Match[]


Anatoly Podgoretsky   (2008-07-27 17:02:00) [10]

> sniknik  (27.07.2008 16:42:16)  [16]

Какая разница, точка не точка, когда есть явный разделитель дата + " - ". Ну конечно при условии, что автор не ССЗБ


sniknik   (2008-07-27 16:52:00) [11]

не, динамики, хриплым потусторонним голосом... бипер в корпусе еще иногда поддакивает...


KilkennyCat   (2008-07-27 16:44:00) [12]


> но чтото мне подсказывает


голоса из розетки? :)


sniknik   (2008-07-27 16:42:00) [13]

> 4. Точка (это разделитель!!!).
только не точка, а точка с пробелом -> ". ", просто точка есть и в датах, а дата в 3 предложении есть и как часть "хвоста".

а то можно в разборе и только от " - " плясать, начало предложение есть позиция " - " минус 8. конец - начало следующего или конец текста... тоже просто.

но чтото мне подсказывает, что автор ждет не объяснений как делать, а готового кода для копи-пасте...


Юрий Зотов   (2008-07-27 16:31:00) [14]

> Newser   (27.07.08 16:12) [14]

Текст состоит из одинаковых элементов. Структура элемента такая:

1. Дата (и неважно, есть у нее впереди ноль, или нет).
2. Тире (это разделитель!!!).
3. Хвост.
4. Точка (это разделитель!!!).

Структура хвоста такая:

1. Первое слово хвоста.
2. Пробел (это разделитель!!!).
3. Остаток хвоста.

Вам нужно разложить элемент на три составляющие:

1. Дата.
2. Первое слово хвоста.
3. Хвост.

Задачка детская, надо только немного подумать. Все делается с помощью функций Pos (или PosEx), Copy, Trim... (см. в справке раздел "string handling routines").


Newser   (2008-07-27 16:12:00) [15]

Так поделитесь, пожалуйста, решением!


Anatoly Podgoretsky   (2008-07-27 15:57:00) [16]

> Newser  (27.07.2008 15:23:10)  [10]

Да элементарнейший же разбор
Любое предложение начинается с "дата - "


Newser   (2008-07-27 15:43:00) [17]

> Milk   (27.07.08 15:32) [11]
Первоначальный текст в Memo!


Milk   (2008-07-27 15:32:00) [18]

Нужно отметить, что это довольно сильно отличается от [0]

> 1.06.08
> 11.06.08

ну и последний наводящий вопрос: где ищем?
БД, мемо или другой какой-либо контрол?


Newser   (2008-07-27 15:23:00) [19]

> KilkennyCat ©   (27.07.08 15:08) [9]
С помощью ADO передаю данные из одной БД в другую. Сложность с одним полем Memo, из одной записи:
"01.02.08 - выезд для встречи. 02.02.08 - звонок для подтверждения. 03.02.08 - звонок, попросили перенести встречу на 04.02.08. 04.02.08 - выезд по плану."
нужно раздельно получить, в конкретном случае 4 записи в новой БД:
1) "01.02.08"; "выезд";   "выезд для встречи."
2) "02.02.08"; "звонок"; "звонок для подтверждения."
3) "03.02.08"; "звонок"; "звонок, попросили перенести встречу на 04.02.08."
4) "04.02.08"; "выезд";   "выезд по плану."

Как это возможно сделать?


KilkennyCat   (2008-07-27 15:08:00) [20]

Вообще, мало данных сообщаете. Вполне возможно, что решение намного проще, особенно , если обрабатываете какой-то стандартный документ.

> Как в этом мне поможет компонент?


Возникает вопрос, а при чем здесь Делфи?...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо