|
Определить с чего начинается строка с цифры или буквы | ☑ | ||
---|---|---|---|---|
0
shock3r
25.10.12
✎
11:54
|
Подскажите как в 1С пределить с чего начинается строка с цифры или буквы, есть ли такая функция?
|
|||
1
Wobland
25.10.12
✎
11:54
|
код символа определи для начала
|
|||
2
1Страх
25.10.12
✎
11:55
|
нет, но можно написать
|
|||
3
drcrasher
25.10.12
✎
11:55
|
(0) Число() не предлагать?
|
|||
4
Wobland
25.10.12
✎
11:55
|
а функции такой нет
|
|||
5
Reset
25.10.12
✎
11:55
|
Функция называется "Лев", а что считать цифрой или буквой - это твое дело
|
|||
6
Wobland
25.10.12
✎
11:56
|
(3) навеяло..
Если СтрДлина(Строка(ч))=1 Тогда //проверка на <10 |
|||
7
Wobland
25.10.12
✎
11:56
|
(6) это я вчера китайский код изучал. термин такой в смысле
|
|||
8
Reset
25.10.12
✎
11:57
|
(6) Реально было на мисте - Найти(Число,"-")>0 - проверка на отрицательность
|
|||
9
shock3r
25.10.12
✎
11:57
|
(3) спасибо, должно взлететь!
|
|||
10
Wobland
25.10.12
✎
11:58
|
(8) реально было пару дней назад. ресурсы у регистра: Размер42, Размер44...
|
|||
11
Reset
25.10.12
✎
11:58
|
(10) матьь
|
|||
12
Wobland
25.10.12
✎
11:58
|
(9) то есть, автор всё-таки выбрал китайский путь...
|
|||
13
Ayvengo
25.10.12
✎
11:58
|
(9) одна беда, через попытку нужно делать.
|
|||
14
Classic
25.10.12
✎
11:59
|
(8)
А че, нормально |
|||
15
1Страх
25.10.12
✎
11:59
|
Симв = Лев(Стр,1);
ЭтоБуква = (НРег(Симв)<>ВРег(Симв)); |
|||
16
Wobland
25.10.12
✎
12:00
|
+(10) а, не, не пару. наверное, в писькомерной ветке отметилась. v8: Запрос. Упорядочивание по артикулу
|
|||
17
Ayvengo
25.10.12
✎
12:00
|
(15) интересный вариант ;)
|
|||
18
Азат
25.10.12
✎
12:00
|
ну или Найти("0123456789", Лев(Стр,1) = 0
|
|||
19
Ayvengo
25.10.12
✎
12:00
|
(15) не прокатит для знаков препинания и т.п. правда
|
|||
20
Reset
25.10.12
✎
12:01
|
Ну знак препинания он и не буква :)
|
|||
21
cawokru
25.10.12
✎
12:01
|
лев() + КодСимвола >= 48 И КодСимвола <= 57
|
|||
22
1Страх
25.10.12
✎
12:01
|
(19) это только для букв
правад слышал, что в грузинском прописных букв нет |
|||
23
Wobland
25.10.12
✎
12:02
|
(21) алилуйя!
|
|||
24
cawokru
25.10.12
✎
12:02
|
+(1)
|
|||
25
Ayvengo
25.10.12
✎
12:03
|
(22) есть ;) но в других языках, возможно нет.
|
|||
26
shock3r
25.10.12
✎
12:04
|
(15) Сам бы до такого не додумался))) очень интересный вариант
|
|||
27
shock3r
25.10.12
✎
12:06
|
(21) а можно немного расшифровать? что за 48, 57? КодСимвола?
|
|||
28
Мимо Проходил
25.10.12
✎
12:06
|
(21) Настоящий 1С-ник соорудит конструкцию Если (Лев(Стр,1)="0") Или (Лев(Стр,1)="1")... И т.д. :))
|
|||
29
cawokru
25.10.12
✎
12:06
|
(27) цифры
|
|||
30
cawokru
25.10.12
✎
12:07
|
код цифер
|
|||
31
Ayvengo
25.10.12
✎
12:07
|
(27) от 0 до 9 цифры, видимо ;)
|
|||
32
shock3r
25.10.12
✎
12:07
|
(28) настоящий индус)
|
|||
33
cawokru
25.10.12
✎
12:07
|
ы, цифЕр
|
|||
34
Wobland
25.10.12
✎
12:09
|
(32) китаец. различай понятия
|
|||
35
Wobland
25.10.12
✎
12:10
|
||||
36
ptiz
25.10.12
✎
12:10
|
Функция НачинаетсяСЦифры(Парам)
Запрос = Новый Запрос("ВЫБРАТЬ 1 ГДЕ &Парам ПОДОБНО ""[0-9]%"""); Запрос.УстановитьПараметр("Парам", Парам); Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции // НачинаетсяСЦифры() |
|||
37
Wobland
25.10.12
✎
12:11
|
(36) понеслось...
|
|||
38
shock3r
25.10.12
✎
12:15
|
Ребята вообщем написал по первому символу по коду (15), но это не фонтан, т.к. есть один косяк!!!
Если строка имеет такое значение "315Матрац", то по логике кода - это тоже будет цифра)))) а надо отмониторить, чтобы всё в строке были цифрами... сейчас имею след код: Если КодСимвола(СтрПолучитьСтроку(строка, 2), 1) >= 48 И КодСимвола(СтрПолучитьСтроку(строка, 2), 1) <= 57 Тогда НоваяСтрока.Серия = "Цифра!" КонецЕсли; |
|||
39
Reset
25.10.12
✎
12:27
|
используй китайскую(по классификации чуть выше) методику:
Если КодСимвола(СтрПолучитьСтроку(строка, 2), 2) >= 48 И КодСимвола(СтрПолучитьСтроку(строка, 2), 2) <= 57 Тогда НоваяСтрока.Серия = "Цифра!" КонецЕсли; Если КодСимвола(СтрПолучитьСтроку(строка, 2), 3) >= 48 И КодСимвола(СтрПолучитьСтроку(строка, 2), 2) <= 57 Тогда НоваяСтрока.Серия = "Цифра!" КонецЕсли; Если КодСимвола(СтрПолучитьСтроку(строка, 2), 3) >= 48 И КодСимвола(СтрПолучитьСтроку(строка, 2), 1) <= 57 Тогда НоваяСтрока.Серия = "Цифра!" КонецЕсли; И тд |
|||
40
Reset
25.10.12
✎
12:27
|
в последнем копипасте ошибка :(
|
|||
41
Reset
25.10.12
✎
12:27
|
и во втором. ну идея понятна
|
|||
42
Reset
25.10.12
✎
12:28
|
и в первом
да блин, как я умудрился |
|||
43
Ayvengo
25.10.12
✎
12:30
|
ЭтоЧисло = Ложь;
НомерСимвола = 1; Пока Не ЭтоЧисло Цикл Если КодСимвола(Строка, НомерСимвола) > =48 и КодСимвола(Строка, НомерСимвола) <= 57 Тогда ЭтоЧисло = Истина; Иначе Прервать; КонецЕсли; НомерСимвола = НомерСимвола + 1; КонецЦикла; |
|||
44
Ayvengo
25.10.12
✎
12:32
|
ДлинаСтроки = СтрДлина(Строка);
Для НомерСимвола = 1 По ДлинаСтроки Цикл Если КодСимвола(Строка, НомерСимвола) > =48 и КодСимвола(Строка, НомерСимвола) <= 57 Тогда // Что там тебе нужно сделать ;) КонецЕсли; КонецЦикла; |
|||
45
drcrasher
25.10.12
✎
12:37
|
Общий модуль ОбщегоНазначения
Функция ЕстьНеЦифрыВСтроке(Знач СтрокаПроверки) Экспорт
|
|||
46
Reset
25.10.12
✎
12:38
|
(45) Писатели общего модуля не читают СП на предмет параметров КодСимвола!
|
|||
47
ptiz
25.10.12
✎
12:39
|
Функция ТолькоЦифры(Парам)
RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.Pattern = "^[0-9]+$"; Возврат RegExp.test(Парам); КонецФункции // ТолькоЦифры() |
|||
48
Classic
25.10.12
✎
12:40
|
СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Число,"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9","") = ""
|
|||
49
Ayvengo
25.10.12
✎
12:40
|
(48) охтвоюжмать :D
|
|||
50
Ayvengo
25.10.12
✎
12:40
|
(48) в цикле для по будет красивее :Р
|
|||
51
Ayvengo
25.10.12
✎
12:42
|
(48) и еще, косяк.. ведь надо убирать только первые цифры, а не в середине или где-то еще ;)
|
|||
52
Classic
25.10.12
✎
12:44
|
(51)
Читай (38) |
|||
53
drcrasher
25.10.12
✎
12:45
|
(46) этточно
(47) клёвый подход, уважаю =) |
|||
54
Ayvengo
25.10.12
✎
12:47
|
(52) ну фиг знает, я понял что только первые, тут нас рассудит только ТС :)
|
|||
55
shock3r
25.10.12
✎
15:25
|
Спасибо ребята)) информации предостаточно)
|
|||
56
vmv
25.10.12
✎
15:29
|
кушойте не обляпуйтесь - все рабочее
мини-лексический анализатор на 1С вчера напсало для просморта ВТ, удаления ВТ из Пакетов, и пр., хотя ему по фик с чем работать и мне плевать на вопли "можно красивше" а на фига красивше? // // Add_ComM_ОтчетыКС.СтрокаБукв_Ru(); // Функция СтрокаБукв_Ru() Экспорт Возврат "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ"; КонецФункции // // Add_ComM_ОтчетыКС.Буква_Ru(С); // Функция Буква_Ru(С) Экспорт Возврат Найти(СтрокаБукв_Ru(), ВРег(С)) <> 0; КонецФункции // // Add_ComM_ОтчетыКС.СтрокаБукв_En(); // Функция СтрокаБукв_En() Экспорт Возврат "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; КонецФункции // //Add_ComM_ОтчетыКС.Буква_En(С); // Функция Буква_En(С) Экспорт Возврат Найти(СтрокаБукв_En(), ВРег(С)) <> 0; КонецФункции // // Add_ComM_ОтчетыКС.СтрокаЦифр(); // Функция СтрокаЦифр() Экспорт Возврат "0123456789"; КонецФункции // //Add_ComM_ОтчетыКС.Цифра(С); // Функция Цифра(С) Экспорт Возврат Найти(СтрокаЦифр(), ВРег(С)) <> 0; КонецФункции // //Add_ComM_ОтчетыКС.Буква_Ru_ИлиБуква_En(С); // Функция Буква_Ru_ИлиБуква_En(С) Экспорт Возврат Найти(СтрокаБукв_Ru()+СтрокаБукв_En(), ВРег(С)) <> 0; КонецФункции // //Add_ComM_ОтчетыКС.Буква_Ru_ИлиБуква_En_ИлиЦифра(С); // Функция Буква_Ru_ИлиБуква_En_ИлиЦифра(С) Экспорт Возврат Найти(СтрокаБукв_Ru()+СтрокаБукв_En()+СтрокаЦифр(), ВРег(С)) <> 0; КонецФункции // //Add_ComM_ОтчетыКС.ПолучитьДлинуИдВСтрокеСПозиции(СтрокаСимволов, НачПозИд); // Функция ПолучитьДлинуИдВСтрокеСПозиции(СтрокаСимволов, НачПозИд, ШаблонПоиска) Экспорт ИсходнаяНачПоз = НачПозИд; Если ИсходнаяНачПоз <= СтрДлина(СтрокаСимволов) Тогда ПредшествующийСимвол = Сред(СтрокаСимволов, ИсходнаяНачПоз-1, 1); ПредшествующийСимволБуква_Ru_ИлиБуква_En_Или_ = (Буква_Ru_ИлиБуква_En(ПредшествующийСимвол) ИЛИ ПредшествующийСимвол = "_"); Иначе ПредшествующийСимволБуква_Ru_ИлиБуква_En_Или_ = Ложь; КонецЕсли; Ид = ""; СтрокаДлина = СтрДлина(СтрокаСимволов); Для ТекущаяПозиция = НачПозИд По СтрокаДлина Цикл ИдДлина = СтрДлина(Ид); ТкСимвол = Сред(СтрокаСимволов, ТекущаяПозиция, 1); Если Найти(ШаблонПоиска, ВРег(ТкСимвол)) Тогда Если ИдДлина Тогда Ид = Ид + ТкСимвол; Иначе Если ПредшествующийСимволБуква_Ru_ИлиБуква_En_Или_ И ИсходнаяНачПоз = ТекущаяПозиция Тогда Прервать; // С первого же символа Ид происходит слияние со словом, которое содержит терм - это не Ид. КонецЕсли; Если Буква_Ru_ИлиБуква_En(ТкСимвол) ИЛИ ТкСимвол = "_" Тогда НачПозИд = ТекущаяПозиция; // Смещаем НачПозИд для первого сивола Ид, вероятно перед ней были пробелы Ид = Ид + ТкСимвол; Иначе Прервать; // В первом же символе Ид цифра - это ошибка написания идентификатора КонецЕсли; КонецЕсли; Иначе Если ИдДлина Тогда Прервать; // Ид уже содержит символы и текущий символ не в шаблоне, значит это конец Ид. КонецЕсли; КонецЕсли; КонецЦикла; Возврат СтрДлина(Ид); КонецФункции // // Варианты вызова: // // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "Поместить", Истина); // имена временных таблиц запроса // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "ПОМЕСТИТЬ", Истина); // ... // // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "Уничтожить", Истина); // имена уничтожаемых временных таблиц запроса // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "УНИЧТОЖИТЬ", Истина); // ... // // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "&", Истина); // имена параметров запроса // // Add_ComM_ОтчетыКС.ПолучитьМассивИдВСтрокеПослеТермов(ЗапросТекст, "Поместить", Истина, Истина); // В этом вызове получим массив ид с термами точно так как они сформированы в строке т.е. // "ПОМЕСТИТЬ Вт1" // "ПОМЕСТИТЬ Вт2" // ... // Функция ПолучитьМассивИдВСтрокеПослеТермов(Знач СтрокаСимволов, СтрокаТерма, Уникальные = Истина, ВключаяТерм = Ложь) Экспорт СтрокаСимволовИсходная = СтрокаСимволов; мИдентификаторы = Новый Массив; СтрокаСимволовВРег = ВРег(СтрокаСимволов); СтрокаТермаВРег = ВРег(СтрокаТерма); СтрокаТермаДлина = СтрДлина(СтрокаТерма); // Находим позицию первого символа терма, далее с (НачПозИд + СтрокаТермаДлина) - это позиции поиска идентификатора НачПозТерма = Найти(СтрокаСимволовВРег, СтрокаТермаВРег); Если НачПозТерма Тогда НачПозИд = НачПозТерма + СтрокаТермаДлина; Иначе Возврат мИдентификаторы; КонецЕсли; ШаблонПоиска = СтрокаБукв_Ru() + СтрокаБукв_En() + СтрокаЦифр(); Пока НачПозИд Цикл ИдДлина = ПолучитьДлинуИдВСтрокеСПозиции(СтрокаСимволовВРег, НачПозИд, ШаблонПоиска); Если ИдДлина > 0 Тогда Ид = Сред(СтрокаСимволовИсходная, НачПозИд, ИдДлина); КонПозИд = НачПозИд + ИдДлина; Если ВключаяТерм Тогда ИдВключаяТерм = Сред(СтрокаСимволовИсходная, НачПозТерма, КонПозИд-НачПозТерма); Если Уникальные Тогда Если мИдентификаторы.Найти(ИдВключаяТерм) = Неопределено Тогда мИдентификаторы.Добавить(ИдВключаяТерм); КонецЕсли; Иначе мИдентификаторы.Добавить(ИдВключаяТерм); КонецЕсли; Иначе Если Уникальные Тогда Если мИдентификаторы.Найти(Ид) = Неопределено Тогда мИдентификаторы.Добавить(Ид); КонецЕсли; Иначе мИдентификаторы.Добавить(Ид); КонецЕсли; КонецЕсли; КонецЕсли; Если КонПозИд >= СтрДлина(СтрокаСимволовИсходная) Тогда Прервать; КонецЕсли; // Сокращаем СтрокаСимволовИсходная и СтрокаСимволовИсходнаяВРег СтрокаСимволовИсходная = Сред(СтрокаСимволовИсходная, КонПозИд); СтрокаСимволовВРег = Сред(СтрокаСимволовВРег , КонПозИд); // Готовим следующую итерацию поска очередного Ид по терму НачПозТерма = Найти(СтрокаСимволовВРег, СтрокаТермаВРег); Если НачПозТерма Тогда НачПозИд = НачПозТерма + СтрокаТермаДлина; Иначе Прервать; // Выход итак будет по условию итерации цикла, но выходим сразу КонецЕсли; КонецЦикла; Возврат мИдентификаторы; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |