Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

12.06.2010, 16:53
|
|
Участник форума
Регистрация: 12.11.2009
Сообщений: 160
Провел на форуме: 568182
Репутация:
11
|
|
Помогите с макросами
Ребят нужна помощь с макросами
{один|два|три}- выбирается одно из слов или фраз. Думаю все знают.
||| - разделяет сообщение на 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
как это релизовать на делфи, знаю только что надо записать в стринглист весь нашь текст
|
|
|

12.06.2010, 17:54
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Как всегда, на билдере. Не нравится мне синтаксис делфи =)
PHP код:
String sMacros = "";
TStringList* MacrosList = new TStringList;
// если StrictDelimiter == false, пробел тоже будет считаться разделителем
MacrosList->StrictDelimiter = true;
// указываем нужный разделитель
MacrosList->Delimiter = '|';
//пока макросы есть в сообщении выполняем цикл
while(sMsg.Pos("{") && sMsg.Pos("}"))
{
// записываем первый в сообщении макрос в переменную sMacros
sMacros = sMsg;
sMacros.Delete(1, sMacros.Pos("{"));
sMacros.SetLength(sMacros.Pos("}") - 1);
// разбиваем макрос на строки (одна строка - один вариант текста)
MacrosList->DelimitedText = sMacros;
// выбираем случайный вариант текста
sMacros = MacrosList->Strings[Random(MacrosList->Count)];
// заменяем в сообщении текст макроса на выбранный вариант
sMsg = sMsg.SubString(1, sMsg.Pos("{") - 1) +
sMacros +
sMsg.SubString( sMsg.Pos("}") + 1,
sMsg.Length() - sMsg.Pos("}"));
}
p.s.: про Randomize не забудь
Последний раз редактировалось M_script_; 12.06.2010 в 17:57..
|
|
|

12.06.2010, 22:24
|
|
Участник форума
Регистрация: 12.11.2009
Сообщений: 160
Провел на форуме: 568182
Репутация:
11
|
|
вот так?
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;
|
|
|

13.06.2010, 00:10
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Сообщение от aydar
вот так?
Вроде да. Если работает, значит все правильно.
|
|
|

13.06.2010, 01:45
|
|
Участник форума
Регистрация: 12.11.2009
Сообщений: 160
Провел на форуме: 568182
Репутация:
11
|
|
вот именно, что ниче не выводит
вставлял этот текст
{Хай|Привет} [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
Последний раз редактировалось aydar; 13.06.2010 в 01:54..
|
|
|

13.06.2010, 03:05
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Сообщение от 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;
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|