Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2011, 20:16   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Удаляем с переменной все кроме цифр.

Подскажите пожалуйста как реализовать подобное?
В php это делается всего одной строчкой $get2 = preg_replace( '#[^0-9]#i', '', $get);

А в delphi насколько я понял такой оператор не поддерживается.


Пробовал реализовать вот такой пример:
Код:
function only_numbers(str:string):string;//получает строку
                                         //возвращает только цифры из строки
var buf:string;
    i:integer;
begin
buf:='';
for i:=1 to length(str) do//перебираем все символы строки
  if str[i] in ['0'..'9'] then buf:=buf+str[i];//если очередной символ - цифра
                                               //то приписываем  его к итоговой строке
Result:=buf;
end;
Но он к сожалению отказывается работать когда в переменной вообще нет цифр. Подскажите как модифицировать его, тоесть если в переменной нет цифр, необходимо выводить пустую переменную.

Или может есть какой-то более простой вариант?
celovec вне форума Ответить с цитированием
Старый 14.08.2011, 20:54   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

В смысле что вам нужно? Получить всё цифры из строки, и собрать их в одно число?
_-Re@l-_ вне форума Ответить с цитированием
Старый 14.08.2011, 21:00   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но он к сожалению отказывается работать когда в переменной вообще нет цифр.
Ну правильно - если в переменке нет цифр то он вернет тебе пустое место, там ведь цифр нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2011, 21:07   #4
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
если в переменной нет цифр, необходимо выводить пустую переменную
так у тебя так и есть, если в переданой переменной str нет цифр функция вернет ''
т.е. пустую переменную.

P.S.
Кстати в delphi можно использовать регулярные выражения, модуль RegExpr
fate вне форума Ответить с цитированием
Старый 14.08.2011, 22:13   #5
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
В смысле что вам нужно? Получить всё цифры из строки, и собрать их в одно число?
Нет. Необходимо просто получить все цифры из строки.

Stilet, может я что-то не так понимаю.
Может я не там ищу. У меня вылетает вот такая ошибка если в переменной нет цифр.


Тоесть ситуация такая если в поле нет цифр идет условие:
if (only_numbers(Edit5.Text) = '') then button4.Caption:='10';
следующее условие уже работает с 10, но почему-то это верхнее условие не срабатывает. Почему?
Изображения
Тип файла: png 11.PNG (8.0 Кб, 86 просмотров)

Последний раз редактировалось celovec; 14.08.2011 в 22:18.
celovec вне форума Ответить с цитированием
Старый 14.08.2011, 22:26   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Такую ошибку поставляет функция StrToInt, если строка пустая, или содержит не цифры. Применять TryStrToInt.
Скандербег вне форума Ответить с цитированием
Старый 14.08.2011, 22:29   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Функция написана правильно, а вот результатом её пользуетесь не правильно. Покажите конкретно фрагмент кода, где ошибка вываливается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2011, 22:41   #8
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Аватар, он не показывает какая именно строчка ему не нравится.
Скандербег, что здесь необходимо поменять?

Код:
 button4.Caption:=only_numbers(Edit5.Text);
 if (strtoint(button4.Caption) > 30) or (strtoint(button4.Caption) < 1) or (only_numbers(Edit5.Text) = '') then button4.Caption:='10';




**** далее уже другая процедура связанная с button4.Caption***

   max:=strtoint(button4.Caption);
  try
    stringBuff.CustomSort(CompareWithValues);
    if (stringBuff.Count < max) then max:=stringBuff.Count;

Последний раз редактировалось celovec; 14.08.2011 в 22:43.
celovec вне форума Ответить с цитированием
Старый 14.08.2011, 22:46   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вторая команда вашего кода сразу даст ошибку, если button4.Caption=''. strtoint от '' - дает ошибку

можно заменить на
if (only_numbers(Edit5.Text) = '') or (strtoint(button4.Caption) > 30) or (strtoint(button4.Caption) < 1) then button4.Caption:='10';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.08.2011 в 22:51.
Аватар вне форума Ответить с цитированием
Старый 14.08.2011, 22:54   #10
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Насколько я понимаю вы о этом говорите:
only_numbers(Edit5.Text) = ''
Это тоже самое что button4.Caption='', а причем тут strtoint?
celovec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автофильтр (AutoFilter), как отфильтровать данные все кроме.? SAIIIA.P Microsoft Office Excel 8 30.06.2022 19:33
Обрезать все кроме цифр, Дельфи TorchWood Работа с сетью в Delphi 8 01.08.2015 17:36
Написал программу, все работает кроме одного момента. Palomnik1096 Microsoft Office Excel 5 09.12.2010 14:56
Как скрыть все листы в ЕКСЕЛЕ кроме определенного списка sasha_prof Microsoft Office Excel 2 03.12.2010 21:09
Закрыть все файлы Excel,кроме текущего BesTiYa Microsoft Office Excel 5 10.12.2009 12:53