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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделения текста на слова, Простите чайника... 
:(
    Опции темы
Samhein
  Дата 14.10.2005, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Вот код:
Код

var
s :string;
begin
 s :=Edit1.Text;
Label1.Caption :=  Copy(s,0,pos(' ', s));
delete(s,0, pos(' ', s));
 Label2.Caption  :=  Copy(s,0,pos(' ', s));
end;

По моему он должен работать так:
Взят текст из Edit1...
первой написи присвоить первое слово из этого текста
Удалить это слово с пробелом.
Второй надписи присвоить второе слово
Вот только слово не удаляется... smile smile Объясните почему...


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
_hunter
Дата 14.10.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



а не проще ли делать так:
Код
s :=Edit1.Text;    
Label1.Caption :=  s.SubString(1, s.Pos(' '));    
s.Delete(1, s.Pos(' '));
Label2.Caption  :=  s; 


Это сообщение отредактировал(а) Alex - 15.10.2005, 20:20


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Samhein
Дата 14.10.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



У меня не работает... smile
На s.SubString и s.Delete ругается...

Это сообщение отредактировал(а) Samhein - 14.10.2005, 19:42


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Samhein
Дата 14.10.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Не можете мне объяснить как правильно работать с delete


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Zero
Дата 14.10.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Samhein @ 14.10.2005, 18:04)
Вот только слово не удаляется...  Объясните почему...

Всё очень, просто... У тебя в строке:
Код

delete(s,0, pos(' ', s));

Стоит удалять начиная с нулевого, а надо с 1-го... Это ведь строка, а не динамический массив... smile
PS: копирование командой Copy, тоже делай с 1-го символа, а то ошибка будет...
Вот правельный код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
begin
  s:=Edit1.Text;
  label1.Caption:= Copy(s,1,Pos(' ',s));
  delete(s,1,Pos(' ',s));
  label2.Caption:=s;
end;

PM MAIL ICQ   Вверх
Samhein
Дата 15.10.2005, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Zero, спасибо!


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Pakshin A. S.
Дата 15.10.2005, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В тему про разделение текста из едита на слова, не ограниченные по количеству...

Предложу вариант:
Код

s:=Trim(Edit1.Text);
s:=StringReplace(s, ',' , ' ', [rfReplaceAll]);
(*И так все знаки премпинания... Моно в цикле поработать с множеством*)
while Pos('  '{два пробела}, s) <> 0 do
 s:=StringPeplace(s, '  '{два пробела}, ' ', [rfReplaceAll]);
s:=s + ' ';
(*Вот теперь обычная разборка стори со словами, разделенными одним пробелом*)
while s <> '' do
 begin
  (**)
  Delete(s, 1, Pos(' ', s);
 end;


Может есть что-нить еще более удобное?

Это сообщение отредактировал(а) lonely delphist - 15.10.2005, 22:28
PM   Вверх
Samhein
Дата 16.10.2005, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Код

var t:TStringList; 

begin 
  t:=TStringList.create; //создаём класс 
  t.text:=stringReplace('Ваша строка для разделения',' ',#13#10,[rfReplaceAll]);//мы заменяем все пробелы на символы конца строки 
//теперь можно убедится что у вас строка разбина на элементы: 
  showmessage(t[0]); 
  showmessage(t[1]); 
  showmessage(t[2]); 
  showmessage(t[3]); 
... 
//после работы надо уничтожить класс 
t.free; 


Взято из DRKB


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Pakshin A. S.
Дата 16.10.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ууу... при нехватки памяти данный код не очень-то хорош... Кстати, а строку "Казнить, нельзя помиловать " Не верно разделит... smile
PM   Вверх
Samhein
Дата 16.10.2005, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Но разделит smile


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Pakshin A. S.
Дата 16.10.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Samhein @ 16.10.2005, 10:47)
Но разделит

Не верное разделение за разделение не считается...
PM   Вверх
Samhein
Дата 16.10.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Тогда так:
Код

var t:TStringList; 
begin
  t:=TStringList.create;
   Edit1.Text :=  stringReplace(Edit1.Text,'.','',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,',','',[rfReplaceAll]);
  t.text:=stringReplace(Edit1.Text,' ',#13#10,[rfReplaceAll]);
  showmessage(t[0]);
  showmessage(t[1]);
  showmessage(t[2]);
  showmessage(t[3]);
t.free;
end;


Это сообщение отредактировал(а) Samhein - 16.10.2005, 11:59


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Pakshin A. S.
Дата 16.10.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(lonely @ 15.10.2005, 23:27)
s:=StringReplace(s, ',' , ' ', [rfReplaceAll]);
(*И так все знаки премпинания... Моно в цикле поработать с множеством*)
while Pos('  '{два пробела}, s) <> 0 do
s:=StringPeplace(s, '  '{два пробела}, ' ', [rfReplaceAll]);

Тогда возвращаемся к этому...
PM   Вверх
Samhein
Дата 16.10.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


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

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



Или продолжаем это: smile
Код

var t:TStringList; 
begin
  t:=TStringList.create;
   Edit1.Text :=  stringReplace(Edit1.Text,'.','',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,',','',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,'  ',' ',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,'/',' ',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,'?','',[rfReplaceAll]);
   Edit1.Text :=  stringReplace(Edit1.Text,'!','',[rfReplaceAll]);
  t.text:=stringReplace(Edit1.Text,' ',#13#10,[rfReplaceAll]);
  showmessage(t[0]);
  showmessage(t[1]);
  showmessage(t[2]);
  showmessage(t[3]);
t.free;
end;

И закрываем нафиг тему smile


--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Pakshin A. S.
Дата 16.10.2005, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Edit1.Text := stringReplace(Edit1.Text,' ',' ',[rfReplaceAll]);
Вот это не прокатит для примера трех пробелов сразу... поэтому целесообразней использовать цикл, упомянутый выше...
Добавлено @ 15:06
И разбор строки ручками по-моему потребует меньше ресурсов...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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