Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Вытащить из текста все слова ничинающиеся на Сверх (https://forum.antichat.xyz/showthread.php?t=209942)

bootsektor 08.06.2010 03:47

Вытащить из текста все слова ничинающиеся на Сверх
 
Есть текст в нем есть слова которые начинаються на слоги "Сверх"
надо вытащить все эти слова. что бы получился список с такими словами.

Что-то пробую пробую, получилось только методом выделения текста и копирования. memo1.seltext.
Это очень медленно. Помогите народ. дайте пример?
Надо на делфи

090808 08.06.2010 04:18

Очень просто

Кидаешь на форму 2 memo в memo1 кидаешь свои слова на кнопку кидаешь
Цитата:

var
i:integer;
begin
For i:=0 to memo1.lines.Count-1 do
if pos ('Вверх',memo1.lines[i])<>0 then
memo2.lines.Add(memo1.lines[i])
При нажатие на кнопку слова с "Сверх" с memo1 будут скопированы в memo2

bootsektor 08.06.2010 04:45

090808, твой код копирует строки.
а надо слова.

Была сверх новая звезда блабла. сверхновый блабла.
привет сверху блабла


надо что бы вытащились слова: сверх, сверхновый, сверху

зы все слова одинаковой длины! в примере просто разная длина. длина слов: 8 символов

090808 08.06.2010 05:33

Код:

var
Find,s:string;
i:integer;
begin
find:='Сверх';
For i:=0 to Memo1.Lines.Count-1 do
If Pos(FIND, Memo1.Lines.Text)<>0
Then
Begin
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(FIND)+3;
Memo2.Lines.Add(Memo1.SelText);
Memo1.text:=StringReplace(memo1.Text,Memo1.SelText,'',[rfReplaceAll]);


SultanOFF 08.06.2010 08:44

Код:

procedure TForm1.btn1Click(Sender: TObject);
var reg1: tregexpr;
begin
reg1:= tregexpr.create; 
reg1.Expression:='(сверх.*?) '; 
if reg1.Exec(mmo1.Text) then begin 
 repeat       
 mmo2.Lines.Add(reg1.Match[1]);       
until not reg1.ExecNext;   
 end;  end;

Используя регулярки. Легко и быстро. Текст берется из mmo1.text и вставляется в mmo2.text

bootsektor 08.06.2010 10:34

090808, я же в топике писал, что чкркз сел текст сам сделал. но очень долго работает
SultanOFF, ошибка: [Error] Unit1.pas(29): Undeclared identifier: 'tregexpr'

M_script_ 08.06.2010 10:42

все просто
PHP код:

while(sText.Pos("сверх"))
{
    
sText.Delete(1sText.Pos("сверх") + 1);
    
sWord sText;
    
sWord.SetLength(sWord.Pos(" ") - 1);
    
Memo1->Lines->Add("сверх" sWord);



SultanOFF 08.06.2010 10:49

Цитата:

SultanOFF, ошибка: [Error] Unit1.pas(29): Undeclared identifier: 'tregexpr'
ты пропиши в uses regexpr; предварительно скачав модуль регулярок и положив в папку с проектом. Модуль можешь скачать отсюда

bootsektor 08.06.2010 10:55

SultanOFF, спасибо. так и сделал. но как решить вопрос то что после слова может быть не токо пробел? ище точки цифры и тд?)

M_script_ 08.06.2010 11:08

Цитата:

Сообщение от bootsektor
SultanOFF, спасибо. так и сделал. но как решить вопрос то что после слова может быть не токо пробел? ище точки цифры и тд?)

...
PHP код:

for(int i 1<= sWord.Length(); ++i)
{
    if(
sWord[i] < 'а' || sWord[i] > 'я')
    {
        
sWord.SetLength(1);
        break;
    }




Время: 09:25