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

Вниз

Как разбить текст на строки?   Найти похожие ветки 

 
ekto ©   (2008-07-11 13:11) [0]

Есть текст: (х А х А х......)

 где:  х - любая последовательность слов
        А - искомая последовательность слов (хранятся в БД).

 Нужно разбить текст на строки вида: (х А х)
                                                    (А х)
                                                    ... ,
 т.е. находится нужная фраза и все последующие слова до следующей, формируется строка  и т.д.


 
Dennis I. Komarov ©   (2008-07-11 13:12) [1]

POS + F1 Спасет отца русской демократии...


 
ekto ©   (2008-07-11 13:19) [2]


> Dennis I. Komarov ©   (11.07.08 13:12) [1]


Забыл добавить "по-быстрее".

есть набор данных( в котором искомые фразы). Ну и как, по твоему должен выглядеть код?
while not q.Eof do
begin
 MyPos := Pos(q.FieldByName("n").AsString, tmpText);
 if  MyPos <> 0 then
 begin
   StrArr[i] := ...
   Inc(i)
...
end;

а, если в StrArr[i], окажется пропущенная фраза?


 
Ega23 ©   (2008-07-11 13:22) [3]


> POS + F1 Спасет отца русской демократии...

И + COPY


 
Dennis I. Komarov ©   (2008-07-11 13:23) [4]

> [2] ekto ©   (11.07.08 13:19)

Бред какой...
Ищи где надо разбить и вставляй #$13 #$10. Токма я не понял где результат хранить...


 
ekto ©   (2008-07-11 13:29) [5]


> Dennis I. Komarov ©   (11.07.08 13:23) [4]


 да, точно, протормозил. а где хранить - не важно


 
Dennis I. Komarov ©   (2008-07-11 13:30) [6]

> а где хранить - не важно

Очень даже важно, в виду упомянутой тобой БД...


 
ekto ©   (2008-07-11 13:41) [7]


> Dennis I. Komarov ©   (11.07.08 13:30) [6]


while not q.Eof do
begin
MyPos := Pos(q.FieldByName("n").AsString, tmpText);
if  MyPos <> 0 then
begin
  tmpText := Copy(tmpText, 1, MyPos - 1) + #13#10 + Copy(tmpText, MyPos, Length(tmpText) );
 
...

 StringList.Text := tmpText;
end;


 
Поросенок Винни-Пух ©   (2008-07-11 13:41) [8]

Ищи где надо разбить и вставляй #$13 #$10.

Это неправильно.
Так на строки не разбить


 
Dennis I. Komarov ©   (2008-07-11 13:50) [9]

> [7] ekto ©   (11.07.08 13:41)

with TStringList.Create ... do begin
 Text:=q.FieldByName("n").AsString;

 ...  дальше сам
 Free;
end;


> [8] Поросенок Винни-Пух ©   (11.07.08 13:41)


Это смотря где и чего надо автору. ИМХО ему достаточно...


 
oldman ©   (2008-07-11 13:52) [10]

Кстати, а зачем искомая последовательнось хранится в БД?
Судя по задаче, она единственная. Или нет?
Если нет, что на выходе? N результатов разбивки текста?

Ничего не понимаю ©


 
ekto ©   (2008-07-11 13:53) [11]


> oldman ©   (11.07.08 13:52) [10]


> Кстати, а зачем искомая последовательнось хранится в БД?
>
> Судя по задаче, она единственная. Или нет?

пока порядка тысячи, потом будет больше.


> Если нет, что на выходе? N результатов разбивки текста?

дальше обрабатывать


 
han_malign ©   (2008-07-11 13:59) [12]


> Поросенок Винни-Пух ©   (11.07.08 13:41) [8]

- "Это какие-то неправильыне пчелы."©...
#$13 - Carriage Return - Возврат Каретки
#$10 - Line Feed - Перевод Строки


 
Поросенок Винни-Пух ©   (2008-07-11 14:00) [13]

Ой , а я то и не в кусре. И шо?
Они как-то "разбивают" строку?


 
ekto ©   (2008-07-11 14:02) [14]


> Поросенок Винни-Пух ©   (11.07.08 14:00) [13]


> Они как-то "разбивают" строку?

на мелкие кусочки)


 
Поросенок Винни-Пух ©   (2008-07-11 14:03) [15]

#$10 - Line Feed - Перевод Строки

Вот если бы Разбиватель строки, тогда да. Согласен.


 
Dennis I. Komarov ©   (2008-07-11 14:07) [16]


> [14] ekto ©   (11.07.08 14:02)

#$13 можешь не ставить... Кусочки будут еще мельче :)


 
Anatoly Podgoretsky ©   (2008-07-11 14:39) [17]

> Поросенок Винни-Пух  (11.07.2008 14:00:13)  [13]

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


 
ekto ©   (2008-07-11 14:40) [18]


> Anatoly Podgoretsky ©   (11.07.08 14:39) [17]


> что он будет делать в следующий раз.

т.е.?


 
Anatoly Podgoretsky ©   (2008-07-11 15:08) [19]

> ekto  (11.07.2008 14:40:18)  [18]

А что разфе эта операция будет только один раз запускаться?


 
Dennis I. Komarov ©   (2008-07-11 15:15) [20]

> [19] Anatoly Podgoretsky ©   (11.07.08 15:08)

Он все равно никому ничего не скажет. Это секрет...


 
ekto ©   (2008-07-11 15:30) [21]


> Anatoly Podgoretsky ©   (11.07.08 15:08) [19]

нет, не единожды.


 
Anatoly Podgoretsky ©   (2008-07-11 15:32) [22]

> Dennis I. Komarov  (11.07.2008 15:15:20)  [20]

Сообственно я особо на это и не расчитываю, но буду удивлен, если он все таки все расскажет.


 
ekto ©   (2008-07-11 15:45) [23]


> Anatoly Podgoretsky ©   (11.07.08 15:32) [22]

я расскажу, честно-честно. Но, только после того, как Вы мне объясните суть вопроса. Ну не понял я, что Вас тут интересует: что он будет делать вследующий раз.! С чем делать? Конкретно непонятно, чем отличается первый раз от следующего?

и еще... сбился я с бестолку совсем. С самого начала. Pos мне не подходит. Мне нужно полное совпадение слов/фраз.

str :=  авав сб ро лоыоыв сблг сб ропро длж;
substr := "сб";
...
Result := "авав сб ро лоыоыв сблг " + #13#10 + "сб про длж";

Как сделать, проверять каждый раз, стоят ли на концах найденной подстроки пробелы?


 
Поросенок Винни-Пух ©   (2008-07-11 15:52) [24]

регулар експешшионз


 
ekto ©   (2008-07-11 15:53) [25]


> Поросенок Винни-Пух ©   (11.07.08 15:52) [24]

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


 
Dennis I. Komarov ©   (2008-07-11 16:00) [26]

> [23] ekto ©   (11.07.08 15:45)

Нафига все это надо, и где чего куда подробно...


 
Поросенок Винни-Пух ©   (2008-07-11 16:01) [27]

И могут добавляться в процессе пользования прогой.

Вот как раз в этом RE и удобны.
Так как без них ты модифицируешь алгоритм программы, а с ними только сами выражения, лежащие в файле


 
Поросенок Винни-Пух ©   (2008-07-11 16:03) [28]

Нравятся мне такие перцы.
Сначала ответь им про несколько возможных вариантов решения, потом поуговаривай, потом кашей накорми и еще спать положи.


 
Поросенок Винни-Пух ©   (2008-07-11 16:06) [29]

Как сделать, проверять каждый раз, стоят ли на концах найденной подстроки пробелы?

Проверяй через раз. Чтобы не устать.


 
ekto ©   (2008-07-11 16:11) [30]


> Поросенок Винни-Пух ©   (11.07.08 16:03) [28]

А как прикажешь спрашивать? Не, ну могу, канеш, сказать что мне надо, а вы мне все напишите(если не пошлете), но чет так не очень хочется. А ваще да... мозгое... я еще тот... :)


> Так как без них ты модифицируешь алгоритм программы,

нафик мне его модифицировать? Все лежит в БД. Беру строку и смарю, та иль нет. Ну проще мне так. Точнее, делаю так, как могу.


 
Поросенок Винни-Пух ©   (2008-07-11 16:12) [31]

нафик мне его модифицировать?

Много их. И могут добавляться в процессе пользования прогой.


 
ekto ©   (2008-07-11 16:13) [32]


> Поросенок Винни-Пух ©   (11.07.08 16:12) [31]


> Все лежит в БД.


 
Поросенок Винни-Пух ©   (2008-07-11 16:14) [33]

если алгоритм поиска границ не меняется, то с какого перепугу вдруг потребуется добавлять новые регулярные выражения?!


 
Поросенок Винни-Пух ©   (2008-07-11 16:15) [34]

> Все лежит в БД.

Да хоть в морге на третьей полке.


 
ekto ©   (2008-07-11 16:15) [35]

офтоп. я вот думаю, это только у меня рождаются такие мракобесные алгоритмы или нет? А то взять, да и приобрести метелочку?


 
Поросенок Винни-Пух ©   (2008-07-11 16:17) [36]

> Все лежит в БД.

Ты со строкой работаешь. А где она до этого лежала или стояла - как-то фиолетово.

Или в седьмом классе ты покупал чернила для седьмого класса?


 
b z   (2008-07-11 16:20) [37]


> А то взять, да и приобрести метелочку?
Это выход.


 
Dennis I. Komarov ©   (2008-07-11 16:23) [38]

> [35] ekto ©   (11.07.08 16:15)

Ты кетмара где то встретил? :)


 
ekto ©   (2008-07-11 16:26) [39]


> Поросенок Винни-Пух ©   (11.07.08 16:17) [36]

так, если я правильно понял. Делается это сл. обр.: берется строка, делается для нее шаблон поиска и т.д. Так?


 
ekto ©   (2008-07-11 16:27) [40]


> Dennis I. Komarov ©   (11.07.08 16:23) [38]

О, с удовольствием бы, но увы, подозреваю, он зело занят созданием теории неомизантропии.


 
Поросенок Винни-Пух ©   (2008-07-11 16:31) [41]

шаблон делается для строк, а не для одной строки


 
ekto ©   (2008-07-11 16:31) [42]


> ekto ©   (11.07.08 16:27) [40]

я бы и от соавторства не отказался


 
ekto ©   (2008-07-11 16:36) [43]


> Поросенок Винни-Пух ©   (11.07.08 16:31) [41]

хорошо, нашел по шаблону. А как я узнаю, что это нужная мне строка?


 
Поросенок Винни-Пух ©   (2008-07-11 16:38) [44]

а ты ищи нужные. ненужные не ищи.


 
ekto ©   (2008-07-11 16:48) [45]


> Поросенок Винни-Пух ©   (11.07.08 16:38) [44]

а как отличить нужные от не очень? Шаблон-то для них одинаковым может быть.


 
Dennis I. Komarov ©   (2008-07-11 16:51) [46]

> [45] ekto ©   (11.07.08 16:48)

Ивеваться изволите?


 
Anatoly Podgoretsky ©   (2008-07-11 16:51) [47]

> ekto  (11.07.2008 15:45:23)  [23]

Чем первый сб отличается от второго?


 
Dennis I. Komarov ©   (2008-07-11 16:52) [48]

> [47] Anatoly Podgoretsky ©   (11.07.08 16:51)

Первый не нужный а второй нужный :)


 
Поросенок Винни-Пух ©   (2008-07-11 16:57) [49]

я поначалу думал что он программер...


 
ekto ©   (2008-07-11 16:58) [50]


> Dennis I. Komarov ©   (11.07.08 16:51) [46]


> Anatoly Podgoretsky ©   (11.07.08 16:51) [47]


> Dennis I. Komarov ©   (11.07.08 16:52) [48]

Или я чего-то не знаю/понимаю или недостаточно понятно объяснил.

Рег. выражение. Шаблон: пробел_строка(с длиной, если надо)_пробел_строка_пробел - я здесь правильно ку? А дальше? под такой шаблон подходит почти все.


 
ekto ©   (2008-07-11 17:01) [51]


> Поросенок Винни-Пух ©   (11.07.08 16:57) [49]
>
> я поначалу думал что он программер...

а я думал, что ошибаться свойственно только людям


 
Anatoly Podgoretsky ©   (2008-07-11 17:02) [52]

> Dennis I. Komarov  (11.07.2008 16:52:48)  [48]

Это единственная разница?


 
Поросенок Винни-Пух ©   (2008-07-11 17:08) [53]

Есть текст: (х А х А х......)

где:  х - любая последовательность слов
       А - искомая последовательность слов (хранятся в БД).

Нужно разбить текст на строки вида: (х А х)
                                                   (А х)


А если текст x A x A x A x A x A x A x A x A x A x A ?


 
ekto ©   (2008-07-11 17:09) [54]


> Anatoly Podgoretsky ©   (11.07.08 17:02) [52]

между прочим раздел "для начинающих", могли бы и примерчик приплести к прочим своим мыслям. А то я тут гадаю на кофейной гуще, как именно работает поиск по шаблону. Оказалось не так, как я думал(хотя, уверен, я не смог вам объяснить, что же мне надо). :(. Плз, приведите пример ЛЮБОГО поиска по шаблону. И я вам расскажучто вы, ув. мастера, просмотрели.


 
ekto ©   (2008-07-11 17:10) [55]


> Поросенок Винни-Пух ©   (11.07.08 17:08) [53]

это серьезный вопрос или любопытствование по поводу
> Поросенок Винни-Пух ©   (11.07.08 16:57) [49]
?


 
Поросенок Винни-Пух ©   (2008-07-11 17:10) [56]

10 wmz и золотой ключик у тебя в кармане


 
Поросенок Винни-Пух ©   (2008-07-11 17:11) [57]

это серьезный вопрос или любопытствование по поводу

Это вопрос по поводу
Нужно разбить текст на строки вида: (х А х)
                                                   (А х)


 
ekto ©   (2008-07-11 17:12) [58]


> ekto ©   (11.07.08 17:09) [54]

или побегу за метлой


 
Поросенок Винни-Пух ©   (2008-07-11 17:13) [59]

сначала за тугриками беги


 
ekto ©   (2008-07-11 17:14) [60]


> Поросенок Винни-Пух ©   (11.07.08 17:10) [56]

может 30 мин Бакнелла?


> Поросенок Винни-Пух ©   (11.07.08 17:11) [57]

Вопрос есть ответ. Для тебя это
> Нужно разбить текст на строки вида: (х А х)
>                                                    (А х)
,

> если текст x A x A x A x A x A x A x A x A x A x A ?
проблема?

А я думал, что ты....


 
Поросенок Винни-Пух ©   (2008-07-11 17:15) [61]

не спи, мужик!

почему
x A x
и
A x

И как делить если исходная строка длинее приведенной в начале ветки?


 
Поросенок Винни-Пух ©   (2008-07-11 17:27) [62]

ищешь x*\s+A\s+x\s+
Если найдено, это твоя первая строка.
Далее то же самое но со смещением MatchPos[0] + MatchLen[0] минус зазор c контролем выхода за длину.


 
Тын-Дын ©   (2008-07-11 18:10) [63]


> ekto ©   (11.07.08 13:11)  


Вот уже 62 поста выше, но так и не понятно, по какому алгоритму нужно разбивать строку...


 
User   (2008-07-11 18:17) [64]


> POS + F1 Спасет отца русской демократии...

... и добавить Copy ...
Никуда не денешься от цикла, нахождения нужного и фиксирования результата (позиции начала нужного). Copy можно использовать для урезания строки до позиции после "нужного" и ... продолжаем до конца строки ...
Если это текст - операцию нужно проводить построчно ...


 
b z   (2008-07-11 18:44) [65]

Удалено модератором


 
DVM ©   (2008-07-11 20:17) [66]

Имхо регулярные выражения плохо вяжутся с понятием хорошей скорости обработки. Самым быстрым способом будет проход указателем по строке, сравнение части строки с эталоном, если совпадение, то копируем и сдвиг указателя далее за пределы найденного, если нет, то сдвиг на след символ.


 
Поросенок Винни-Пух ©   (2008-07-11 22:37) [67]

Имхо регулярные выражения плохо вяжутся с понятием хорошей скорости обработки.

Вяжутся только в путь.


 
Поросенок Винни-Пух ©   (2008-07-11 22:52) [68]

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


 
ekto ©   (2008-07-12 02:23) [69]


> Поросенок Винни-Пух ©   (11.07.08 22:52) [68]


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

ориентировочно, с 16 часов у меня есть нормальная реализация.  А насчет производительности согласен с
> DVM ©   (11.07.08 20:17) [66]


 
ekto ©   (2008-07-12 02:29) [70]

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


 
Германн ©   (2008-07-12 02:44) [71]


> ekto ©   (12.07.08 02:29) [70]
>
> и вообще, Поросенок Винни-Пух, если уж берешься подсказывать,
>  будь добр, прояви уважение к задающему вопрос

А ты всегда проявлял уважение к участникам сего форума? Перечитай свои посты.


 
Anatoly Podgoretsky ©   (2008-07-12 10:40) [72]

Да как же тебя понять, если ты ничего не говоришь.
(с) Иван Васильевич.


 
Тын-Дын ©   (2008-07-12 21:19) [73]


> ekto


Задача тривиальная. Если бы сформулировал внятно вопрос - давно бы решил задачу.


 
ekto ©   (2008-07-12 22:07) [74]


> Тын-Дын ©   (12.07.08 21:19) [73]

согласен, см.
> ekto ©   (11.07.08 13:29) [5]



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

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

Наверх




Память: 0.65 MB
Время: 0.029 c
15-1214795612
Slider007
2008-06-30 07:13
2008.08.17
С днем рождения ! 30 июня 2008 понедельник


2-1216112761
Newss
2008-07-15 13:06
2008.08.17
Создание таблицы в word


9-1173617382
Аццкий_рыцарь
2007-03-11 15:49
2008.08.17
Проблема со столкновением


2-1215677312
Геннадий
2008-07-10 12:08
2008.08.17
Найти и удалить одинаковые вхождения в StringList ?


15-1211457036
Kerk
2008-05-22 15:50
2008.08.17
Идеальная потрепаловка. Какой она должна быть?