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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со строками 
:(
    Опции темы
a.S.d
Дата 7.3.2005, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Имеется строка 'some string123' (вместо "some string" может быть что угодно, но "123" постоянно). Как из этой строки сделать строку 'some string'?
PM MAIL   Вверх
December
Дата 7.3.2005, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

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



Код

result:=copy(str,1,pos('123',str));



--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
a.S.d
Дата 7.3.2005, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



December
Надо так:
Код

result:=copy(str,1,pos('123',str)-1);

Иначе result='some string1'.
PM MAIL   Вверх
Poseidon
Дата 7.3.2005, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата
Иначе result='some string1'

Это верно! А все из-за того, что роs определяет положение подстроки '123' в строке, а сору позволяет выделить фрагмент строки, длинной как раз токи до первого символа подстроки '123'(в данном случае), т.е. до 1.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
~FoX~
Дата 7.3.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



ИМХО проще:
Код

result:=copy(str,1, length(str)-3);



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Pakshin A. S.
Дата 7.3.2005, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

Delete(str, Length(str)-3, 3);


а что будет быстрее работаеть? smile
PM   Вверх
Poseidon
Дата 8.3.2005, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



~FoX~
Цитата
result:=copy(str,1, length(str)-3);

будет выдавать то, что ожидается только если 123 в конце строки. А если строка 'some string123abc'? Ведь по предложенному a.S.d условию это не исключается. Поэтому лучше все таки использовать
Цитата
result:=copy(str,1,pos('123',str)-1);
. Так надежней.

PS. Это касается и предложения Pakshin A. S. удалять последние три символа
Цитата
Delete(str, Length(str)-3, 3);
Все хорошо, если эти символы и есть 123, а если нет?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Alex
Дата 8.3.2005, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



a.S.d, а если в строке к примеру два раза встречается 123, то нужно все удалить или нет?


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


Antitheorist
****


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

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



Цитата(a @ 7.3.2005, 01:23)
Надо так:

Угу, лень было думать и проверять smile


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 9.3.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Poseidon
Цитата(a @ 7.3.2005, 01:07)
но "123" постоянно




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Poseidon
Дата 10.3.2005, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



~FoX~, то, что "123" постоянно, это я видел. Но все равно, предложенное тобой
Код
result:=copy(str,1, length(str)-3);
или
Pakshin A. S.
Код
Delete(str, Length(str)-3, 3);
удаляет последние три символа в строке. А если эти символы не желанные "123"? Допустим строка
Цитата
'some string123abc'

Поэтому эти варианты не приемлемы.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SlaUr
Дата 10.3.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может так
Код

While Pos('123',st)>0 do Delete(St,Pos('123',st),3);

PM MAIL   Вверх
~FoX~
Дата 10.3.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Poseidon
Сори, я предыдущий пост не прочитал.......туплю.
Тогда как a.S.d предложил


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Poseidon
Дата 11.3.2005, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Все, я думаю тема исчерпана.
Выводы:
    Если в строке один раз встречается "123", то можно использовать код a.S.d
    Код
    result:=copy(str,1,pos('123',str)-1);

    Если в строке "123" встречается один и более раз, и от этих "123" нужно избавится, то тогда код SlaUr
    Код
    While Pos('123',st)>0 do Delete(St,Pos('123',st),3);

a.S.d, думаю мы тебе тут всем кагалом помогли smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Alex
Дата 11.3.2005, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Poseidon @ 11.3.2005, 04:25)
Если в строке "123" встречается один и более раз, и от этих "123" нужно избавится

Я обычно пишу:
Код

uses
  StrUtils;
...
  st:= AnsiReplaceText(st, '123', '')



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

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

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

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

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


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

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


 




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


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

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