Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Разделить [email protected];pass


Автор: pomogite 21.8.2011, 12:17
Появилась нужда проверять почту с нескольких мыл, но немогу понять как разбить строку вида [email protected];pass чтобы login вносился в переменную и pass вносился в переменную, немогу разобраться с функцией pos, подскажите пожалуйста как это можно сделать? 

Автор: Frees 21.8.2011, 12:24
суть такова
Код

s := '[email protected];pass';
login := copy(s, 1, pos('@', s));
pass := copy(s, pos(';', s))


отладишь и доведешь сам как нибудь.

Автор: pomogite 21.8.2011, 12:45
Frees, Спасибо большое. Только если пишу так 
Код

s := '[email protected];pass';
login := copy(s,0, pos('@', s)-1);
pass := copy(s,0,pos(';', s));

То на выходе получаю login - login(тут правильно) и pass - [email protected] как мне сделать чтобы после знака всё скопировать?

Автор: Poseidon 21.8.2011, 13:48
Если строка именно такого вида, ничего больше в ней нет, то можно регуляркой вытащить:
Код

(^[_a-zA-Z\d\-\.]+|[_a-zA-Z\d\-\.]+$)


Добавлено через 1 минуту и 37 секунд
А, да. В pass ведь могут быть русские буквы. Вот так тогда
Код

(^[_a-zA-Z\d\-\.]+|[_a-zA-Zа-яА-Я\d\-\.]+$)

Автор: Frees 21.8.2011, 13:57
Цитата(pomogite @  21.8.2011,  15:45 Найти цитируемый пост)
То на выходе получаю login - login(тут правильно) и pass - [email protected] как мне сделать чтобы после знака всё скопировать?

Код

pass := copy(s, pos(';', s)  +1);

Автор: pomogite 21.8.2011, 14:06
Poseidon, Регуляркой это слишком уж для такой программы простой.


Frees, Так выдаёт ошибку Not enough actual parameters, а если написать 
Код

pass := copy(s,0,pos(';', s)+1);

То pass равен - [email protected];p , т.е только один символ от пароля и всё перед символом ;

Автор: superVad 21.8.2011, 14:20
pomogite, и чего все так этих регулярок боятся? Инструмент как раз для таких задач.

Автор: pomogite 21.8.2011, 14:24
superVad, Компонент устанавливать нужно, в D7 нету своих функций с регулярками

Вот такая вот фигня получилась =)

Код

login := copy(s,0, pos('@', s)-1);
pass := copy(s,0,pos(';', s));
pass2:= copy(Edit1.Text,length(pass)+1,pos(';',Edit1.Text)-1);

Теперь в pass2 выводится нормальный пароль =) Всем спасибо за помощь!

Автор: Frees 21.8.2011, 15:08
Цитата(superVad @  21.8.2011,  17:20 Найти цитируемый пост)
pomogite, и чего все так этих регулярок боятся? Инструмент как раз для таких задач.

потому что для регулярок нужно знать магические заклинания...
Цитата(Poseidon @  21.8.2011,  16:48 Найти цитируемый пост)
(^[_a-zA-Z\d\-\.]+|[_a-zA-Zа-яА-Я\d\-\.]+$)


а смысл в них разбираться? что бы переписать три(!) строчки кода?

Автор: superVad 21.8.2011, 15:14
Цитата(pomogite @  21.8.2011,  13:24 Найти цитируемый пост)
superVad, Компонент устанавливать нужно, в D7 нету своих функций с регулярками

Можно просто пас файл в проект добавить. Разные библиотеки есть.

Добавлено через 1 минуту и 7 секунд
Цитата(Frees @  21.8.2011,  14:08 Найти цитируемый пост)
а смысл в них разбираться? что бы переписать три(!) строчки кода?

В будущем пригодится. Да и вообще - развиваться надо.
Но если все упирается во время, то соглашусь.

Автор: Poseidon 21.8.2011, 18:51
Цитата(Frees @  21.8.2011,  15:08 Найти цитируемый пост)
а смысл в них разбираться? что бы переписать три(!) строчки кода?
Смысл в читаемости кода.

Код

RegExp.Expression:= '(^[_a-zA-Z\d\-\.]+|[_a-zA-Zа-яА-Я\d\-\.]+$)';
if RegExp.Exec(s) then login:= RegExp.Match[0];
if RegExp.ExecNext then pass:= RegExp.Match[0];
и все понятно. А в этих copy-pos с кучей параметров в которых эти же copy-pos, ногу сломаешь.

Автор: Данкинг 21.8.2011, 19:13
Цитата(Poseidon @  21.8.2011,  19:51 Найти цитируемый пост)
и все понятно.

Лично мне вот copy-pos понятно, поскольку с регулярками никогда не работал и вообще не в курсе, что с ними и как. А "выделить 5 символов начиная с 3-го" - тут уж наглядней некуда. smile 

Автор: Poseidon 21.8.2011, 22:24
Данкинг, да, поставленную задачу может и проще с copy решить. Но если эту задачу чуть расширить, допустим, в строке у нас может быть несколько e-mail с паролями после точки с запятой, и единственой зацепкой является "@", то вот тут copy-pos превратится в такую белиберду... 

Автор: northener 21.8.2011, 23:23
Цитата(pomogite @  21.8.2011,  14:24 Найти цитируемый пост)
login := copy(s,0, pos('@', s)-1);
pass := copy(s,0,pos(';', s));

Теперь в pass2 выводится нормальный пароль =) Всем спасибо за помощь!


Я что-то пропустил? С каких это пор второй параметр функции Copy может быть равен 0?

Автор: bems 23.8.2011, 07:13
Модератор: Оффтоп удалён. Давайте вернёмся к теме обсуждения.

Автор: HoZeY 3.9.2011, 16:18
Код

var
  data : TStringList;
  mail, pass:string;
begin

  data := TStringList.Create;

  data.Delimiter := ';';        // Разделитель
  data.DelimitedText := '[email protected];pass'; // текст

  mail:=data[0];
  pass:= data[1];
 
data.free;

end;



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)