Модераторы: 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   Вверх
Poseidon
Дата 12.3.2005, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Alex, раз человек задает такой вопрос, то, я думаю он еще толком не тазобрался со тем, что Delphi предлагает по умолчанию. И что бы еще разбираться, что там за функции есть в StrUtils просто не до этого.


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


Эксперт
****


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

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



Poseidon, в этом и дело, что я сейчас показал ему, что перед тем как задавать вопрос или пытаться самому реализовывать какую-то функцию нужно потратить немного времени и посмотреть, а что Delphi предлагает. Дело в том, что достаточно грамотные и знающие программиста порой не знают о существовании таких нужных и полезных функций. Но их можно понять, эти функции появились в Delphi не так давно, по-моему, начиная с 5 версии. А я в душе человек ленивый и ужасно не люблю изобретать велосипеды я ищу уже написанное стандартное и им пользуюсь (хотя иногда на поиски уходит не один месяц smile ). Многие, к примеру, до сих пор при переводе строки в число или сначала проверяют строку, чтобы в ней были только числа или обрамляют вызов функции try except, а я человек ленивый пользуюсь функцией StrToIntDef и записываю это действие в одну строку, а не в 6.

PS:
А все разговоры, что мы сначала покажем человеку не совсем правильно, но то, что писать легче (эта тема к счастью не этот случай) я ненавижу. Если уж учить так, учить и если показывать пример то самый правильный и может быть самый навороченный, но в нем учтены все подводные камни, о которых вам известно. Дело в том, что, показав один раз человеку легкий, но не совсем правильный код вы делаете этому человеку и еще тем людям, которым этот человек будет теперь уже сам отвечать на подобный вопрос большую гадость. Не совсем правильный код расползается по сети, попадает в FAQ и народ считает его верным. Доказать потом, что этот код не верный и переучить человека писать правильно очень сложно. Поэтому лучше в самом начале дать нормальный качественный пример может быть не совсем простой. Я знаю множество примеров, когда везде в сети лежит один и тот же пример и он не рабочий, но при задании вопроса все упорно копируют его в качестве ответа.


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


Delphi developer
****


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

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



Alex
Цитата
все разговоры, что мы сначала покажем человеку не совсем правильно, но то, что писать легче
По-моему примеры, каторые были приведены в этой теме не относятся к неправильным. И если прочитать коментарий по этим примерам (тоже в теме), то становится понятно, что получишь, даже не загружая Delphi и не проверяя (в случае, если не разу не встречался с функциями copy, pos, delete). Но вот в чем дело, это хорошо, что есть человек, каторый знает стандартную функцию, а если нет? Я думаю, задав вопрос на форуме, никто не согласится ждать
Цитата
не один месяц
Поэтому и ответы были не "что по-проще", а "что действительно поможет". Но конечно, если дать стандартную функцию, то это будет самый ценный (но не всегда самый хороший, т.к. в большинстве таких случаев люди просто копируют функцию, не разбираясь в том, как она действует) ответ.
Но я думаю, что мы с тобой не будем начинать дискуссию по этому поводу (по крайней мере здесь), т.к. это уже можно опредилить как smile .

PS. А насчет твоего посскриптума, так это ты прав. Это и меня очень раздражает. Я, к примеру, всегда даю код, каторый либо мною написан, либо проверен на ошибки перед этим. Ведь многие только начинают. И напиши в примере кода хотя бы FloadToStr (реальный пример описки в предложенном коде), начинают тебе говорить, что код с ошибкой и не компилируется. А что бы исправить ошибку опыта (пока) не хватает. Поэтому таким людям нужно давать все проверенное, да и еще с //описанием.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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