Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Помогите с МеМО   Найти похожие ветки 

 
Msd   (2008-07-24 09:49) [0]

была задача выбрать нужные куски текста из файла загруженного в Memo. Нужно чтобы выбирались только нужные куски текста, на пример если строка содержит "Саша" далее какой то текст и до строки Содержащей "Наташа", сами эти строки должны тоже остаться при выборке.
использовал код:
var
i : integer;
 check : string;
 sum : string;
begin
for i:=0 to memo1.Lines.Count-1 do begin
   if pos("Саша", memo1.Lines[i])<>0 then check:=memo1.Lines[i];
   if (pos("Наташа", memo1.Lines[i])<>0) then begin
     sum:=memo1.Lines[i];
     memo2.Lines.Add(check);
     memo2.Lines.Add(sum);
   end;
 end;
end;

у меня получается что он выбирает толь "Саша" и "Наташа" :(. Подскажите пожалуйста как быть мастера. Как дописать правильно? Спасибо :)


 
Медвежонок Пятачок ©   (2008-07-24 10:11) [1]

цикл для саши.
внутри цикл для наташи.
запоминание начальной строки следующего поиска саши
все это внутри глобального цикла контролирующего невыход за пределы списка строк


 
Johnmen ©   (2008-07-24 10:15) [2]

>Как дописать правильно?

Тут переписывать надо
if posEx("Саша", memo1.Lines.Text,<здесь циклич.переменная>)....
if (posEx("Наташа", memo1.Lines.Text,<здесь циклич.переменная>)...


 
oldman ©   (2008-07-24 10:18) [3]

Даю алгоритм )

1. Проверяем 1 строку
2. Если "Саша" нет, удаляем, возвращаемся к 1
3. Если "Саша" есть, копируем строку в memo2, удаляем
4. Проверяем 1 строку
5. Если "Наташа" нет, копируем строку в memo2, удаляем, возвращаемся к 4
6. Если "Наташа" есть, копируем строку в memo2
7. Все


 
Медвежонок Пятачок ©   (2008-07-24 10:19) [4]

Даю алгоритм )
он неправильный

если найден саша то пока не найдена наташа или не конец списка то ничего копировать и удалять вообще не надо.


 
oldman ©   (2008-07-24 10:22) [5]


> Медвежонок Пятачок ©   (24.07.08 10:19) [4]
> Даю алгоритм )
> он неправильный


Он правильный.
В memo2 перенесутся строки от саши до наташи включительно


 
Медвежонок Пятачок ©   (2008-07-24 10:23) [6]

мужик шерстит лог чата и вырезает переписку саши и наташи.


 
Медвежонок Пятачок ©   (2008-07-24 10:24) [7]

3. Если "Саша" есть, копируем строку в memo2, удаляем

А зачем? Наташа может уже не будет найдена ниже.


 
Медвежонок Пятачок ©   (2008-07-24 10:26) [8]

тем более что может быть вариант

саша бла бла бла
бла бла бла
наташа блабла бла
снова наташа бла бла бла


 
oldman ©   (2008-07-24 10:27) [9]


> for i:=0 to memo1.Lines.Count-1 do begin
>    if pos("Саша", memo1.Lines[i])<>0 then check:=memo1.Lines[i];
>
>    if (pos("Наташа", memo1.Lines[i])<>0) then begin
>      sum:=memo1.Lines[i];
>      memo2.Lines.Add(check);
>      memo2.Lines.Add(sum);
>    end;
>  end;


Здесь ошибка.

Ты добавляешь сашу только если нашел наташу.
При варианте нахождения наташи без саши в memo2 добавляется лабуда


 
oldman ©   (2008-07-24 10:29) [10]


> Медвежонок Пятачок ©   (24.07.08 10:24) [7]
> Медвежонок Пятачок ©   (24.07.08 10:26) [8]



> Нужно чтобы выбирались только нужные куски текста, на пример
> если строка содержит "Саша" далее какой то текст и до строки
> Содержащей "Наташа", сами эти строки должны тоже остаться
> при выборке.


Видимо лабу пишет.
И в исходных данных и саша и наташа есть


 
Медвежонок Пятачок ©   (2008-07-24 10:30) [11]

Самое загадочное :

сами эти строки должны тоже остаться
> при выборке.


Тоже как и какие еще?


 
oldman ©   (2008-07-24 10:40) [12]


> Медвежонок Пятачок ©   (24.07.08 10:30) [11]
> Тоже как и какие еще?


те, что между ними


 
Msd   (2008-07-24 10:43) [13]

Вот именно я и говорю
есть допустим текст

Жил был Саша 5
бла
бла
бла бал
И Наташа 7
далее фигня написана (много :) )
потом опять
Жил был Саша 10
бла
бла
бла бал
И Наташа 54
Задача в том чтобы оставить нужные куски и ни чего лишнего:
Жил был Саша 5
бла
бла
бла бал
И Наташа 7
Жил был Саша 10
бла
бла
бла бал
И Наташа 54 и.т.д Как сделать посдскажите. Спасибо.


 
Медвежонок Пятачок ©   (2008-07-24 10:44) [14]

[8]


 
Медвежонок Пятачок ©   (2008-07-24 10:48) [15]

и что делать если ниже последнего саши много чего есть, но нет наташи?


 
Msd   (2008-07-24 10:51) [16]

если нет Наташи тогда тоже пропускать, нужны только куски Саша Наташа и все что между ними. :)


 
Медвежонок Пятачок ©   (2008-07-24 10:52) [17]

саша
наташа
маша
наташа
конец


 
Медвежонок Пятачок ©   (2008-07-24 10:53) [18]

саша бла бла бла наташа саша
саша
наташа


 
Msd   (2008-07-24 10:53) [19]

твои текст
саша
наташа
маша
наташа
конец
отсюда нужно
саша
наташа
маша
наташа
если идет Саша без наташи тогда тоже не надо


 
Msd   (2008-07-24 10:54) [20]

нет наташа и саша в одной строке не попадаются


 
oldman ©   (2008-07-24 10:54) [21]


> Как сделать посдскажите. Спасибо.


В [3] поменяй:

1. Если memo1 пуст, завершаем, если нет, проверяем 1 строку
6. Если "Наташа" есть, копируем строку в memo2, удаляем, возвращаемся к 1

И переведи на Паскаль.
В результате в memo2 окажется результат, memo1 очистится для дальнейшего использования


 
Медвежонок Пятачок ©   (2008-07-24 10:57) [22]

с больше чем одной наташей не прокатит
у него шаблон "саша.+наташа" д.б. жадный


 
Msd   (2008-07-24 11:00) [23]

блин это значит не получиться да? А можно ли без загрузки в МЕМО? Просто чтобы в файле остались только нужные куски? подскажите как это вообще реализовать. Желательно пример, я же только учусь.. ;)


 
Msd   (2008-07-24 11:20) [24]

Что ни кто не знает :(?


 
Медвежонок Пятачок ©   (2008-07-24 11:25) [25]

ищем сашу.
ищем следующего сашу, а находя наташу, запоминаем номер её строки.
если найдены оба, копируем их и между ними.


 
Msd   (2008-07-24 11:27) [26]

Блин легко сказать. ПОЖАЛУЙСТА исходничек напиши, чтоб я разобрался как это происходит все.... Спасибо..) Надо закончить дело..)


 
Тын-Дын ©   (2008-07-24 11:28) [27]


> Msd   (24.07.08 09:49) 

Проще всего использовать TStrings(TStringList И т.п.).
Для реализации ищи тему в инете "конечные автоматы".


 
oldman ©   (2008-07-24 11:28) [28]


> Msd   (24.07.08 11:27) [26]
> Блин легко сказать. ПОЖАЛУЙСТА исходничек напиши


На лекции надо ходить.
За исходнички надо платить.


 
Msd   (2008-07-24 11:33) [29]

ясно спасибо.


 
Anatoly Podgoretsky ©   (2008-07-24 11:36) [30]

> Медвежонок Пятачок  (24.07.2008 10:19:04)  [4]

Алгоритм правильный, но не оптимальный.


 
Anatoly Podgoretsky ©   (2008-07-24 11:37) [31]

> Медвежонок Пятачок  (24.07.2008 10:23:06)  [6]

Предположение не соответствуею заявленому заданию, он ищет паразитов, которые помешали его диалогу с Наташей, он потом отомстит им.


 
Медвежонок Пятачок ©   (2008-07-24 11:37) [32]

оптимальный по тройной цене :)


 
oldman ©   (2008-07-24 11:38) [33]


> Anatoly Podgoretsky ©   (24.07.08 11:36) [30]
> Алгоритм правильный, но не оптимальный.


Для лабы, думаю, сойдет.
Тем более у автора проблемы даже с переводом оного на Паскаль.


 
Anatoly Podgoretsky ©   (2008-07-24 11:39) [34]

> oldman  (24.07.2008 10:29:10)  [10]

>
> Видимо лабу пишет.
> И в исходных данных и саша и наташа есть
>
Видимо.
А что стоит после слова "есть"


 
Медвежонок Пятачок ©   (2008-07-24 11:39) [35]

да и неправильный он там.
там найдя наташу сразу ищется следующий саша.


 
Anatoly Podgoretsky ©   (2008-07-24 11:39) [36]

> Медвежонок Пятачок  (24.07.2008 10:30:11)  [11]

бла бла бла Саша бла бла бла
Должна остать вся строка, а не Саша бла бла бла


 
Anatoly Podgoretsky ©   (2008-07-24 11:40) [37]

> Msd  (24.07.2008 10:43:13)  [13]

А это уже другое задание, более крупное, более дорогое!


 
Медвежонок Пятачок ©   (2008-07-24 11:41) [38]

ему нужен кусок "саша - последняя маша перед следующим сашей или концом если больше саши нет.


 
Anatoly Podgoretsky ©   (2008-07-24 11:41) [39]

> Msd  (24.07.2008 10:51:16)  [16]

Задание все усложняется и цена тоже, при том не пропорционально, а с коэффициентом бестолковости.


 
Anatoly Podgoretsky ©   (2008-07-24 11:42) [40]

> Msd  (24.07.2008 10:53:19)  [19]

За Машу отдельные бабки.



Страницы: 1 2 вся ветка

Текущий архив: 2008.09.14;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.023 c
2-1216308535
Дмитрий Белькевич
2008-07-17 19:28
2008.09.14
Окно - прогресс в отдельном потоке


2-1217517420
self.name
2008-07-31 19:17
2008.09.14
insert в TFileStream


15-1216793329
Jeer
2008-07-23 10:08
2008.09.14
Linux Festival


15-1216821757
Vlad Oshin
2008-07-23 18:02
2008.09.14
Поставил FastMM.dll - стала BDS2006 глючить. Ни у кого больше?


2-1217770915
mokmoc
2008-08-03 17:41
2008.09.14
TLabel + Paint + Align