#0
by Fragster
Интересные варианты есть? Пока побеждает СтрЗаменить(СН,"1",""); СтрЗаменить(СН,"2",""); СтрЗаменить(СН,"3",""); СтрЗаменить(СН,"4",""); СтрЗаменить(СН,"5",""); СтрЗаменить(СН,"6",""); СтрЗаменить(СН,"7",""); СтрЗаменить(СН,"8",""); СтрЗаменить(СН,"9",""); СтрЗаменить(СН,"0",""); Возврат СН = "";
#2
by DexterMorgan
Функция ВернутьЦифрыИзСтроки(СтрокаПроверки, УдалитьЛидирующиеНули = Истина) Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда Возврат ""; КонецЕсли; ЦифрыИзСтроки = ""; Для ё = 1 По СтрДлина(СтрокаПроверки) Цикл Символ = Сред(СтрокаПроверки, ё, 1); Если ЭтоЦифра(Символ) Тогда ЦифрыИзСтроки = ЦифрыИзСтроки + Символ; КонецЕсли; КонецЦикла; Если УдалитьЛидирующиеНули Тогда ЦифрыИзСтроки = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ЦифрыИзСтроки, "0"); КонецЕсли; Возврат ЦифрыИзСтроки; КонецФункции Функция ЭтоЦифра(Символ) КодСимвола = КодСимвола(Символ); Возврат (КодСимвола >= 48 И КодСимвола <= 57) КонецФункции
#4
by Fragster
не цифры из строки, а только цифры. в общем, пробегание по строке с проверкой каждого символа, понятно на линукс-сервере не работает
#5
by Tatitutu
Цель какую преследуешь ? Попытка А=Сн*1; Сообщить("Это число"); Исключение Сообщить("Это не число"); КонецПопытки;
#6
by Торин
опередили... попытка времЧисло = Число(исхСтрока); толькоЧисла = истина; исключение толькоЧисла = Ложь; КонецПопытки;
#12
by DexterMorgan
Из типовой Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда Возврат Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда Возврат Истина; КонецЕсли; Если НЕ УчитыватьПробелы Тогда СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", ""); КонецЕсли; Если НЕ УчитыватьЛидирующиеНули Тогда НомерПервойЦифры = 0; Для а = 1 По СтрДлина(СтрокаПроверки) Цикл НомерПервойЦифры = НомерПервойЦифры + 1; КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); Если КодСимвола <> 48 Тогда Прервать; КонецЕсли; КонецЦикла; СтрокаПроверки = Сред(СтрокаПроверки, НомерПервойЦифры); КонецЕсли; Для а = 1 По СтрДлина(СтрокаПроверки) Цикл КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции
#15
by Fragster
вот именно. а и думает, что да, только цифры. вообще неплохая задача на собеседование для отсеивания 1сников, которые не могут понять задачу
#16
by Fenrik
Возврат Вопрос("В строке """ + СН + """ только цифры?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да;
#26
by KishMish
Если заведомо известно, что строка конечной длины то можно так Дли=СтрДлина(Стр); Возврат Стр>=Прав("00000000000000000000000000000000000000000000000",Дли) и Стр<=Прав("9999999999999999999999999999999999999999999",Дли);
#28
by NikVars
/****************************************************************************** // ВСтрокеОставитьТолькоЦифры(СтрокаИзСимволовИЦифр) // // Параметры: // СтрокаИзСимволовИЦифр (строка) - из которой будут удалены символы, которые не являются десятичными цифрами // // Описание: // Возвращает строку, которая является результатом удаления из строки //СтрокаИзСимволовИЦифр всех символов, не являющих десятичными цифрами // Функция ВСтрокеОставитьТолькоЦифры(СтрокаИзСимволовИЦифр) Перем Рез; //Заменяем все символы не цифры на точку, чтобы при выполнении цикла на изменилась длина строки Для i = 1 По СтрДлина(СтрокаИзСимволовИЦифр) Цикл СтрокаИзСимволовИЦифр1 = Сред(СтрокаИзСимволовИЦифр, i, 1); //1 символ Если Найти("0123456789", СтрокаИзСимволовИЦифр1) = 0 Тогда СтрокаИзСимволовИЦифр = СтрЗаменить(СтрокаИзСимволовИЦифр, СтрокаИзСимволовИЦифр1, "."); КонецЕсли; КонецЦикла; //Удаляем символы, которые являются точкой Рез = СтрЗаменить(СтрокаИзСимволовИЦифр,".", ""); Возврат Рез; КонецФункции // ВСтрокеОставитьТолькоЦифры
#30
by NikVars
Слишком много "бы"... Это побеждает??????? "Возврат СН = "";" Ок, всегда буду использовать!
#31
by Vovik
Зн=СокрЛП(К2.Наименование); ЗнПреобр=""; ДопустСим="+0123456789";//В номерах телефона другого не надо (синхр. с мобилой) Для п3=1 по СтрДлина(Зн) Цикл Сим=Сред(Зн,п3,1); Если Найти(ДопустСим,Сим)>0 Тогда ЗнПреобр=ЗнПреобр+Сим; КонецЕсли; КонецЦикла;
#32
by Fragster
нет, в - пример работающего кода (ну, кроме забытых СН = в строках с СтрЗаменить), выполняющего задачу. Интересно, что даже имея пример многие 1сники не смогли понять, что же требуется.
#34
by Fragster
прочитал в скобках? без присвоения оно, кстати, не проходит синтаксический контроль.
#38
by Vovik
Можно сравнить еще как то извратнее: СтрДлина(Число("5ап1а1")) = 1 СтрДлина("5ап1а1") = 6 (7.7)
#39
by CepeLLlka
Эээм.. перебираешь символы в строке, заранее создав список из кодов символов цифр, и проверяешь находится ли КодСимвола текущего символа, в списке.
#49
by miron25
Вроде работает и с действительными числами..Дайте пирожок. штоТам=""; ВвестиСтроку(штоТам); штоТам2= ВРег(штоТам); если штоТам=штоТам2 тогда сообщить("только цифры"); иначе сообщить("есть и буквы"); конецесли;
#53
by Mnemonic1C
Часто регулярные выражения используются для тестирования строк, например пользовательского ввода. Этот пример позволяет узнать, является ли строка целым числом. Код 1C v 7.x /////////////////////////////////////////////////////////////////////// //Проверка подстроки Процедура RegExp_Test RegExp = CreateObject("VBScript.RegExp"); RegExp.Pattern = "^d+$"; //Шаблон, который соответствует целому числу стр="12345";//Строка, которую тестируем Если RegExp.Test(стр)=0 Тогда Сообщить("Это не целое число"); Иначе Сообщить("Это целое число"); КонецЕсли; //Выдаст в окно сообщений: //"Это целое число" КонецПроцедуры
#56
by Fragster
требуется ровно то, что в сабже: "Проверить, что в строке только цифры". результат проверки - да или нет
#58
by sirsp
+10050 ЗЫ ИМХО удобно, когда нормальный парсер типа Число(Строка) в таких случаях возвращает 0
#59
by banco
Возврат СтрДлина(СН) = (СтрЧислоВхождений(СН, "0") + СтрЧислоВхождений(СН, "1") + СтрЧислоВхождений(СН, "2") + СтрЧислоВхождений(СН, "3") + СтрЧислоВхождений(СН, "4") + СтрЧислоВхождений(СН, "5") + СтрЧислоВхождений(СН, "6") + СтрЧислоВхождений(СН, "7") + СтрЧислоВхождений(СН, "9") )
#60
by Fragster
вопрос и правда интересный. будем считать, что да, тем более, что имеющийся в код тоже так считает.
#61
by КонецЦикла
Хм... а с чего бы "" являлось числом? Какие предпосылки? Твоя штука может и ошибаться...
#64
by Torquader
Просто тогда метод Если Строка(Число(ПроверяемаяСтрока))=ПроверяемаяСтрока Тогда ЭтоЧисло=Да; Но, 001 - это числовая строка, а не число, а 1.1 - число, но не строка из цифр.
#65
by Fragster
сколько раз нужно повторить 1снику, что нужна проверка на то, что строка содержит только цифры, чтобы он это понял?
#66
by Karavanych
мне не нравится код в тем что сложность метода = число символов*10; много, потому что 1с ники обычно решают практические задачи, и не любят теоретические :)
#67
by John D
А почему нельзя по-простому: ехать от начала к концу и, как только текущий символ НЕ цифры - сразу возвращать ЛОЖЬ, а, если доехал до конца - ИСТИНУ? Проще-то некуда, вроде.
#68
by Prilepsky
А можно вообще извратиться и сделать проверку через запрос :) ТолькоЦифры = Истина; КС = Новый КвалификаторыСтроки; Массив = Новый Массив; Массив.Добавить(Тип("Строка")); ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Наименование",ОписаниеТиповС,"Наименование"); СтрокаТЗ = Тз.Добавить; СтрокаТЗ.Наименование = СН; КоличествоСимволов = СтрДлина(СН); Подобие = ""; Для Н = 1 По КоличествоСимволов Цикл Подобие = Подобие + "[0-9]"; КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | ИСТИНА КАК ТолькоЦифры |ПОМЕСТИТЬ времТаб |ИЗ | &ТЗ КАК ТЗ |ГДЕ | ТЗ.Наименование ПОДОБНО &Подобие |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Т.ТолькоЦифры |ИЗ | времТаб КАК Т"); Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.УстановитьПараметр("Подобие", Подобие); Результат = Запрос.Выполнить; Если Результат.Пустой Тогда ТолькоЦифры = Ложь; КонецЕсли; Сообщить(ТолькоЦифры);
#71
by DJ Anthon
не нравится - используй Число("0" + СокрЛП). просто там вообще все, что угодно может оказаться. защиту от дурака еще никто не отменял.
#72
by arsik
+ ну и надо тестировать на реальных данных. Допустим в если нечисло будет в начале строки, то будет быстрее
#73
by Zero on a dice
если в добавить сравнение с округленным результатом, имхо, будет самый быстрый код из стандартных 1С-овых
#74
by DS
По сути - не прав. "Присутствие только цифр" <> "Отсутствие не-цифр" как раз из-за пустой строки.
#75
by Torquader
А есть уверенность, что Найти("0123456789",Символ) будет работать быстрее, чем (Код>=48)И(Код<=57) ?
#76
by Torquader
+ В восьмёрке же КодСимв(Строка,Позиция) позволяет не получать символ из строки, а сразу получить его код.
#78
by Torquader
Видимо, в 1С сравнение чисел выполняется в несколько этапов - сначала сравнение типов, а потом только сравнение данных.
#79
by singlych
Попытка Ответ = НЕ (Найти(СтрокаДляПроверки, ".") ИЛИ Найти(СтрокаДляПроверки, ",") ИЛИ "1" + СтрокаДляПроверки <> Формат(Число("1" + СтрокаДляПроверки), "ЧГ=")); Исключение Ответ = Ложь; КонецПопытки;
#80
by giallo
ВЫБРАТЬ ВЫБОР КОГДА &СН ПОДОБНО "%[^0-9]%" ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ВСтрокеТолькоЦифры
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Забавная задачка... Найти вхождение цифры в строке.
- Как проверить скопирован ли документ?
- Как проверить значение перечисления в запросе?
- Не удалось проверить целостность app-sentx, код возврата -1073741819
- Проверить в строке наличие перевода строки 13+10?
- проверить товар на вхождение в список
- Как определить что в строке только цифры и латинские буквы?
- СКД. В Строке либо цифры либо символы. Как понять когда что?
В этой группе 1С
- выполнить функцию MSSQL с помощью SQL-DMO
- Как при записи эл-та справочника его реквизиту присвоить значение номера эл-та?
- Выражение представления в СКД
- Подскажите бесплатный конвертер с pdf to xls
- Почему условие не исполняется, а код внутри условия срабатывает?
- Правильно ли передаются значения в запрос
- ВР и ПР
- Выплата зарплаты работнику УТ 11 - не видно в расходах - почему?
- v7: Периодически возникает ошибка при создании объекта из компоненты. Терминал
- УФ: Как программно заполнить параметры СКД в отчете при выборе варианта?
- УФ. Полоса регулирования в колонке табличной части
- Галочка "отразить в бух. учете". Управление торговым предприятием.
- v7: Медленное удаление помеч.на удаление документов после обрезки базы
- Как вывести область под присоединенной в ТабДоке?
- Помогите с ремонтом базы: Tool_1CD "Несовпадение длины Blob-поля..."
- Вывести в отчет оборот за 9 месяцев
- Как раздать 50 программных пользовательских лицензий с Линукс-машины?
- СоздатьWSПрокси + авторизация
- Разворачивание узлов Дерева значений в режиме просмотра Иерархический список
- v8: Тестирование и исправление (ТиИ (а ТИС - это торговля и склад))