Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбить строку символов, в Edit`ы 
:(
    Опции темы
Балбес
Дата 17.1.2005, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 19.8.2004

Репутация: нет
Всего: нет



Здравствуйте, ув. господа программисты. smile
Подскажите мне пожста с такой штукой:
есть некая строка символов в Memo, например:
123*456*789 и соответственно три поля Edit.
Как разбить эту строку на три части до звездочек или др.разделителей и поместить это все в разные эдиты?
Выручите примером, плиз smile
PM MAIL   Вверх
Pakshin A. S.
Дата 17.1.2005, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Код

const
rzd = '*';

...

var
s:string;
i:integer;
begin
s:=Memo1.Lines.Text;
i:=1;
while s <> '' do
 begin
  case i of
    1: Edit1.Text:=Copy(s, 1, Pos(Rzd, s)-1);
    2: Edit2.Text:=Copy(s, 1, Pos(Rzd, s)-1);
    ...
  end;
  Delete(s, 1, Pos(Rzd, s));
  inc(i);
 end;
end;

PM   Вверх
Alex
Дата 17.1.2005, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162





--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Stadler
Дата 18.1.2005, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



Как обычно рекламирую мой модуль mystr mystr
Говорю единственный раз :
Это не просто модуль это метод подхода к строке как к полям разделенными символами этим методом должен владеть каждый программист Сложное становится простым!
И я буду рекламировать свой модуль.
Немного истории
Сначала я изучил язык программирования AWK (мне нужно было работать со строками) там был именно такой подход к строке.Это был Си подобный язык .Со стороками можно было делать ВСЕ.
Потом я перешел на Паскаль и мне стало не хватать этого метода я сделал модуль mysys.tpu потом перешел на delphi и переделал немного этот модуль.Над этим модулем нужно работать ВСЕМ.Так что пишите письма.
Код

var st1:string;

Edit1.text:=cNFi(1,St1,'*');
Edit2.text:=cNFi(2,St1,'*');
Edit3.Text:=cNFi(3,St1,'*');



Вот и все дела.Удачи.

PM MAIL   Вверх
SlaUr
Дата 18.1.2005, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Блин прозевал предыдущее сообщение писал я а Stadler это мой первый в жизни ученик по delphi.Модулю кстати лет 10.
Может администратор поменяет имя предыдущего сообщения и удалит это сообщение?

Это сообщение отредактировал(а) SlaUr - 18.1.2005, 06:11
PM MAIL   Вверх
Vit
Дата 18.1.2005, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(SlaUr @ 17.1.2005, 21:06)
Может администратор поменяет имя предыдущего сообщения и удалит это сообщение?


нет


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Балбес
Дата 18.1.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 19.8.2004

Репутация: нет
Всего: нет



Всем пасиба за ответы. smile
Сейчас доработаю код Pakshin A. S. а то он у меня не пашет... Зато принцип понятен.
PM MAIL   Вверх
Балбес
Дата 18.1.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 19.8.2004

Репутация: нет
Всего: нет



В общем, я сделал так:
Код

begin
s:=Memo1.Lines.Strings[n];
Memo2.Text:=Copy(s, 1, Pos(Rzd, s)-1);
Delete(s, 1, Pos(Rzd, s));
Memo3.Text:=Copy(s, 1, Pos(Rzd, s)-1);
Delete(s, 1, Pos(Rzd, s));
Memo3.Text:=s;
end;

А если делать в цикле, чтобы не одна строка в меомо бралась а все по очереди, тогда все виснет или не работает...
Поможите еще раз smile
А еще подскажите как удалять какую-либо строку в мемо, плиз... smile

Это сообщение отредактировал(а) Балбес - 18.1.2005, 21:20
PM MAIL   Вверх
Zero
Дата 19.1.2005, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
Сейчас доработаю код Pakshin A. S. а то он у меня не пашет... Зато принцип понятен.
А все коды Pakshin A. S. ни у кого никогда не пашут с первого раза, потомучто он их перед отправкой ни когда не проверяет, а мне как всегда тут приходится всё доробатывать за ним, блин. smile
В данном случае он не учёл, что при 2-перезаписи из мемо в едит, удаляется символ "разделитель" и за счёт этого процедурой Delete строка S никогда полностью не удалится, т.е. бесконечный цикл (зависание). Вобщем надо добавить такую строку:
Код

if s[length(s)]<>rzd then s:=s+rzd;
сразу после S:=....
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 s:=Memo1.Lines.Text;
 if s[length(s)]<>rzd then s:=s+rzd;
 i:=1;
 while s <> '' do
 begin
  case i of
    1: Edit1.Text:=Copy(s, 1, Pos(Rzd, s)-1);
    2: Edit2.Text:=Copy(s, 1, Pos(Rzd, s)-1);
    3: Edit3.Text:=Copy(s, 1, Pos(Rzd, s)-1);
  end;
  Delete(s, 1, Pos(Rzd, s));
  inc(i);
 end;
end;
Цитата
Как разбить эту строку на три части до звездочек или др.разделителей и поместить это все в разные эдиты?
А вот ещё вариант с использованием одновременно любых разделителей (разделителем является не цифра, а любая другая литера)
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;
 i,j:integer;
begin
 s:=memo1.Text;
 j:=1;
 for i:=1 to 3 do
   begin
     repeat
       if s[j] in ['0'..'9'] then
       begin
         if i=1 then edit1.Text:=edit1.Text+s[j];
         if i=2 then edit2.Text:=edit2.Text+s[j];
         if i=3 then edit3.Text:=edit3.Text+s[j];
         j:=j+1;
       end;
     until not(s[j] in ['0'..'9']);
     j:=j+1;
   end;
end;

PM MAIL ICQ   Вверх
Гость_unregistered
Дата 19.1.2005, 02:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
есть некая строка символов в Memo, например:
123*456*789 и соответственно три поля Edit.
Как разбить эту строку на три части до звездочек или др.разделителей и поместить это все в разные эдиты?


Можно воспользоваться свойствами Delimiter и DelimitedText класса TStringList.
Код


var lst:TStringList;
begin
  lst:=TStringList.Create;
  lst.delimiter:='*';
  lst.DelimitedText:=memo1.text;

 //дальше оперируем строками этого листа
end;



  Вверх
Alex
Дата 19.1.2005, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Гость_unregistered вы не хотите зарегистрироваться у нас. Нам нужны знающие люди.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Marriage
Дата 19.1.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Цитата

Код


var lst:TStringList;
begin
  lst:=TStringList.Create;
  lst.delimiter:='*';
  lst.DelimitedText:=memo1.text;

  //дальше оперируем строками этого листа
end;



В 5-й Дельфе не работает ...
:-(


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 19.1.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Zero У меня дельфей под рукой нету... smile
PM   Вверх
Балбес
Дата 19.1.2005, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 19.8.2004

Репутация: нет
Всего: нет



Спасибо всем за ответы smile
Буду пробовать smile
PM MAIL   Вверх
mvdr
Дата 19.1.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Цитата(Zero @ 19.1.2005, 01:09)
А все коды Pakshin A. S. ни у кого никогда не пашут с первого раза, потомучто он их перед отправкой ни когда не проверяет, а мне как всегда тут приходится всё доробатывать за ним, блин.

а зачем давать 100% правильный код?! Пусть человек сам додумывает, так же интереснее, чем когда тебе дают сразу работающий код.
И еще: не надо показывать, что ты "круче" кого-то в программировании. случиться момент, когда код, данный тобой, будет не правильным и уже кому-то другому придется его исправлять.



--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1098 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.