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

Форум АНТИЧАТ (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=211061)

aydar 12.06.2010 16:53

Помогите с макросами
 
Ребят нужна помощь с макросами

{один|два|три}- выбирается одно из слов или фраз. Думаю все знают.
||| - разделяет сообщение на 2. Выбирает и отправляет одну из указанных частей.

например вот так
Цитата:

{Хай|Привет} [nick]{.|!| | } Как тебе Аватар 2 ?! {Мне очень понравился!)))|Нам понравился)} {Продолжение просто супер!|Классное продолжение первой части } Если{ тоже|} хочешь{ посмотреть|} то скачай в {HD|DVD} - http://ne-afisha.com/index.php?rid=1681&p=2700 Потом {расскажешь впечатления!!!|обязательно расскажешь понравилось или нет} { |^_^ ^_^ ^_^| } [my_nick]|||{Хай|Привет} [nick]{.|!| } Я вот увидел {вчера|на днях} {мультик|мульт} Валл-и 2 Большая уборка, думаю, когда он вышел то. {Взял скачал|Скачал вчера}, прикольный {мультик|мульт}))) Глянь тоже! {||^_^} {Делюсь ссылкой|Вот ссылка|Держи ссылку} - http://ne-afisha.com/index.php?rid=1681&p=2703
как это релизовать на делфи, знаю только что надо записать в стринглист весь нашь текст

M_script_ 12.06.2010 17:54

Как всегда, на билдере. Не нравится мне синтаксис делфи =)
PHP код:

String sMacros "";
TStringListMacrosList = new TStringList;

// если StrictDelimiter == false, пробел тоже будет считаться разделителем
MacrosList->StrictDelimiter true;
// указываем нужный разделитель
MacrosList->Delimiter '|';
//пока макросы есть в сообщении выполняем цикл
while(sMsg.Pos("{") && sMsg.Pos("}"))
{
    
// записываем первый в сообщении макрос в переменную sMacros
    
sMacros sMsg;
    
sMacros.Delete(1sMacros.Pos("{"));
    
sMacros.SetLength(sMacros.Pos("}") - 1);
    
// разбиваем макрос на строки (одна строка - один вариант текста)
    
MacrosList->DelimitedText sMacros;
    
// выбираем случайный вариант текста
    
sMacros MacrosList->Strings[Random(MacrosList->Count)];
    
// заменяем в сообщении текст макроса на выбранный вариант
    
sMsg sMsg.SubString(1sMsg.Pos("{") - 1) +
            
sMacros +
            
sMsg.SubString(    sMsg.Pos("}") + 1,
                            
sMsg.Length() - sMsg.Pos("}"));


p.s.: про Randomize не забудь

aydar 12.06.2010 22:24

вот так?

Цитата:

procedure TForm2.Button2Click(Sender: TObject);
var
sMacros,sMsg: String;
MacrosList: TStringList;
begin
sMacros := '';
MacrosList := TStringList.Create();
MacrosList.Add(memo2.Text);
// если StrictDelimiter = false, пробел тоже будет считаться разделителем
MacrosList.StrictDelimiter := true;
// указываем нужный разделитель
MacrosList.Delimiter := '|';
//пока макросы есть в сообщении выполняем цикл
while (Pos('{', sMsg) <> 0) and (Pos('}', sMsg) <> 0) do
begin
// записываем первый в сообщении макрос в переменную sMacros
sMacros := sMsg;
Delete(sMacros, 1, Pos('{', sMacros));
SetLength(sMacros, Pos('}', sMacros) - 1);
// разбиваем макрос на строки (одна строка - один вариант текста)
MacrosList.DelimitedText := sMacros;
// выбираем случайный вариант текста
sMacros := MacrosList.Strings[Random(MacrosList.Count)];
// заменяем в сообщении текст макроса на выбранный вариант
sMsg := Copy(sMsg, 1, Pos('{', sMsg) - 1) +
sMacros +
Copy(sMsg, Pos('}', sMsg) + 1,
Length(sMsg) - Pos('}', sMsg));
end;
memo1.Text:=sMacros;
end;

M_script_ 13.06.2010 00:10

Цитата:

Сообщение от aydar
вот так?

Вроде да. Если работает, значит все правильно.

aydar 13.06.2010 01:45

вот именно, что ниче не выводит
вставлял этот текст

Цитата:

{Хай|Привет} [nick]{.|!| | } Как тебе Аватар 2 ?! {Мне очень понравился!)))|Нам понравился)} {Продолжение просто супер!|Классное продолжение первой части } Если{ тоже|} хочешь{ посмотреть|} то скачай в {HD|DVD} - http://ne-afisha.com/index.php?rid=1681&p=2700 Потом {расскажешь впечатления!!!|обязательно расскажешь понравилось или нет} { |^_^ ^_^ ^_^| } [my_nick]|||{Хай|Привет} [nick]{.|!| } Я вот увидел {вчера|на днях} {мультик|мульт} Валл-и 2 Большая уборка, думаю, когда он вышел то. {Взял скачал|Скачал вчера}, прикольный {мультик|мульт}))) Глянь тоже! {||^_^} {Делюсь ссылкой|Вот ссылка|Держи ссылку} - http://ne-afisha.com/index.php?rid=1681&p=2703

M_script_ 13.06.2010 03:05

Цитата:

Сообщение от aydar
вот именно, что ниче не выводит
вставлял этот текст

Значит неправильно сделал.
В мемо1 - твой исходный текст.
После нажатия кнопки в мемо2 будет добавляться обработанный текст.

Красным отмечено то, что было неправильно.
Зеленым - то, чего не хватало.
Цитата:

procedure TForm2.Button2Click(Sender: TObject);
var
sMacros,sMsg: String;
MacrosList: TStringList;
begin
sMacros := '';
sMsg := Memo1.Text
MacrosList := TStringList.Create();
MacrosList.Add(memo2.Text);
// если StrictDelimiter = false, пробел тоже будет считаться разделителем
MacrosList.StrictDelimiter := true;
// указываем нужный разделитель
MacrosList.Delimiter := '|';
//пока макросы есть в сообщении выполняем цикл
while (Pos('{', sMsg) <> 0) and (Pos('}', sMsg) <> 0) do
begin
// записываем первый в сообщении макрос в переменную sMacros
sMacros := sMsg;
Delete(sMacros, 1, Pos('{', sMacros));
SetLength(sMacros, Pos('}', sMacros) - 1);
// разбиваем макрос на строки (одна строка - один вариант текста)
MacrosList.DelimitedText := sMacros;
// выбираем случайный вариант текста
sMacros := MacrosList.Strings[Random(MacrosList.Count)];
// заменяем в сообщении текст макроса на выбранный вариант
sMsg := Copy(sMsg, 1, Pos('{', sMsg) - 1) +
sMacros +
Copy(sMsg, Pos('}', sMsg) + 1,
Length(sMsg) - Pos('}', sMsg)) ) ;
end;
memo1.Text:=sMacros;
Memo2.Add(sMsg);
end;


Время: 17:28