Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 376

/ вопрос открыт /

Здравствуйте, уважаемые эксперты! Возник такой вопрос... Понимаю что ничего сложного но хотелось бы узнать... Как разделить 2 слова из memo через ; и вставить ее в поля edit 1,2... 123;321 без copy, delete. Копал в сторону DelimitedText. Если есть возможность помогите пожалуйста с решением этого вопроса, желательно пример, или готовый код с объяснением было бы супер, заранее спасибо.

Smiluk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Smiluk (статус: Посетитель)
Вопрос отправлен: 3 июля 2010, 00:38
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну вот как-то так:

procedure SplitString(const S: string; var Res1, Res2: string);
var
  List: TStringList;
begin
  List:= TStringList.Create();
  try
    List.Delimiter:= ';';
    List.DelimitedText:= S;
 
    if List.Count <> 0
      then Res1:= List[0];
 
    if List.Count > 1
      then Res2:= List[1];
  finally
    List.Free();
  end;
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 3 июля 2010, 09:00
Оценка за ответ: 5

Комментарий к оценке: Спасибо большое! То что нужно. Вопрос закрыт.

Мини-форум вопроса

Всего сообщений: 24; последнее сообщение — 10 июля 2010, 15:35; участников в обсуждении: 2.

Страницы: [1] [2] [Следующая »]

Smiluk

Smiluk (статус: Посетитель), 3 июля 2010, 14:26 [#1]:

Я что то не поглядел) Если мы загружаем большой список в мемо :

123;321
456;654
789;987

Как изменить переменную tstringlist - "List[?];" чтобы он загружал не только первую и вторую строчку после ;, а если значение правильное или не правильное, то загружал дальше по очереди до n бесконечности.
min@y™

min@y™ (статус: Доктор наук), 3 июля 2010, 14:34 [#2]:

Это просто. Грузишь файло в другой List2: TStringList, потом делаешь цикл от Index:= 0 до List2.Count - 1 и подставляешь куда надо (вместо Memo.Text) List2[Index]. Не надо грузить список в Memo, если этот список не нужно редактировать/просматривать.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 3 июля 2010, 14:43 [#3]:

Я ответ изменил немного, обрати внимание.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 3 июля 2010, 15:42 [#4]:

В чем и проблемма... хотелось бы загрузить список в memo, и если что, его можно было прям там и редактировать.
min@y™

min@y™ (статус: Доктор наук), 3 июля 2010, 15:50 [#5]:

Ну если надо редактировать - грузи в мемо. Что тебе мешает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 05:25 [#6]:

Не могли бы вы сного помочь... Присваиваем к значению index:integer; , далее делаем цикл от 0 до -1 , memo оставил как есть... Объясните тупому пожалуйста..

var
List: TStringList;
Index: Integer;
begin
List:= TStringList.Create();
try
List.Delimiter:= ';';
List.DelimitedText:= memo1.Text;

if index=0
then Edit1.Text:= List[0];

if List.Count > -1
then Edit2.Text:= List[-1];
finally
List.Free();
end;
end;
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 08:10 [#7]:

Я не понимаю, чего ты хочешь добиться.
Объясни подробнее, чего ты хочешь от программы.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 16:39 [#8]:

Хочу попробовать написать проверку email на валидность
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 16:50 [#9]:

Цитата (Smiluk):

Хочу попробовать написать проверку email на валидность

Ну и как эта программа должна работать?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 17:01 [#10]:

У меня идет авторизация на сайте, edit1 - mail, edi2 - password, если значение правильное в memo 2 добавляется аккаунт, если нет то в другой. Так вот что я и хочу сделать.. загрузить список аккаунтов, mail;pssword , и чтобы edit1 - mail, edi2 - password подставлялись значения.
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 17:10 [#11]:

А зачем edit'ы?
У тебя ж список строк mail;pssword в мемо хранится...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 17:12 [#12]:

потому что я сначало делал просто для проверки, и решил прикрутить список mail;pssword. помогите пожалуйста
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 18:23 [#13]:

Включаю телепатор...
У тебя есть список почтовых ящиков в текстовом файле формата "логин@сервер;пароль". Ты хочешь в цикле на них коннектиться. Так что ли?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 21:05 [#14]:

Именно так.
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 21:20 [#15]:

Ну так и в чём проблема-то??!!11
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 23:05 [#16]:

код не получается написать.. логично же..
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 23:23 [#17]:

Цитата (Smiluk):

код не получается написать.. логично же..


2Админ: сколько рейтинга надо набрать, чтобы получить разрешение материться?


Аффтар! Сформулируй вопрос по-человечески, а то у меня от телепатии болит голова.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 5 июля 2010, 23:48 [#18]:

Чекер на валидность эмэйл адресов.

edit1 - mail
edi2 - password
memo1 - список mail;pass
memo2 - Валид
memo3 - Не валид

1.У меня идет авторизация на сайте. Если значение правильное, то в memo2 добавляется аккаунт, если нет то в memo3.
2. Каждый раз вводить email;pass в edit думаю не реально, если у нас большой список адресов.
3. Нужно сделать , чтобы когда мы загружали список email;pass в memo1, то он подставлял значения в edit1 - mail, edit2 - pass. Если значение правельное , то email;pass идет в memo2, если нет, то в memo3 и так до самого конца нашего списка. Почему я не хочу поставлять значения сразу через memo, потому что если проверять по 1-2 аккаунта, то легче вбить их по стандарту.
4. Я не хочу использовать copy, delete, т.к. интересно стало можно ли загружать списов в edit's по другому.
5. У меня не получается сделать код, помагите пожалуйста. Думаю я все подробно изложил.
min@y™

min@y™ (статус: Доктор наук), 6 июля 2010, 09:42 [#19]:

Цитата (Smiluk):

Чекер на валидность эмэйл адресов.

Ну вот типа как-то так:
function SplitString(const S: string; var Res1, Res2: string): Boolean;
var
  List: TStringList;
begin
  Result:= False;
  List:= TStringList.Create();
  try
    List.Delimiter:= ';';
    List.DelimitedText:= S;
 
    if List.Count <> 0
      then Res1:= List[0]
      else Exit;
 
    if List.Count > 1
      then Res2:= List[1]
      else Exit;
 
    Result:= True;
  finally
    List.Free();
  end;
end;
 
function IsValidEMail(const eMail, Pass: string): Boolean;
begin
  // <--- Здесь попытка залогиниться. Если удалось, Result:= True, иначе - False
end;
 
var
  UserCanselled: Boolean;
 
procedure TMainForm.StartButtonClick(Sender: TObject);
var
  Index: Integer;
  eMail, Pass: string;
begin
  UserCanselled:= False;
  StartButton.Enabled:= False;
  StopButton.Enabled:= True;
  Memo2.Clear();
  Memo3.Clear();
  try
    for Index:= 0 to Memo1.Lines.Count - 1 do
      begin
        if SplitString(Memo1.Lines[Index], eMail, Pass)
          then begin
                 Edit1.Text:= eMail;
                 Edit2.Text:= Pass;
 
                 if IsValidEMail(eMail, Pass)
                   then Memo2.Lines.Add(Memo1.Lines[Index])
                   else Memo3.Lines.Add(Memo1.Lines[Index]);
               end;
 
        Application.ProcessMessages();
        if UserCancelled
          then Break;
      end;
  finally
    StartButton.Enabled:= True;
    StopButton.Enabled:= False;
  end;
end;
 
procedure TMainForm.StopButtonClick(Sender: TObject);
begin
  UserCancelled:= True;
  Application.ProcessMessages();
end;

З.Ы. АХТУНГ! Писал на коленке, не отлаживал!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Smiluk

Smiluk (статус: Посетитель), 10 июля 2010, 02:05 [#20]:

Извините что гружу сного... но можно комментарии к вашему коду? Вроде бы все понятно изложено, но.. function IsValidEMail она обязательно должна быть функцией? Просто у меня авторизация написанна в - procedure TForm1.Button1Click(Sender: TObject).

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 марта 2023, 17:19
Выполнено за 0.03 сек.
Рейтинг@Mail.ru