Имя: Пароль:
1C
1С v8
Проверить, что символ является буквой
,
0 Ненавижу 1С
 
гуру
10.06.13
11:57
Задача: Является ли символ буквой. Язык 1С 8.2.

Разные есть варианты решения, но хотелось бы:
1. лаконичного
2. без использования ВК (проверка силы языка)
3. универсального (для разных алфавитов)

И я таки думал, что решение это

ЭтоБуква = (НРег(СимволПроверки)<>ВРег(СимволПроверки));

Оказалось зря я так думал. Вот и прошу Вас подумать тоже.
1 Defender aka LINN
 
10.06.13
11:59
(0) Регулярные выражения, не?
2 Dmitrith
 
10.06.13
11:59
Как-то так:
СтрокаПроверки="АБВГД...ЭЮЯ"
Если Найти(ВРЕГ(Симв),СтрокаСимволов)>0 Тогде
Сообщить"Бинго!")
КонецЕсли;
3 cw014
 
10.06.13
11:59
А в каких еще случаях он не равен ВРЕГУ?
4 Dmitrith
 
10.06.13
12:00
(3) Если маленькая буква,не?
5 fisher
 
10.06.13
12:00
А какой критерий "буквы"? Всё, что не цифра? Или всё, что не буква некоего алфавита (тогда какого)?
6 Ненавижу 1С
 
гуру
10.06.13
12:00
(1) в платформе есть?
(2) а если буквы будут якутские?
(3) кто?
7 hhhh
 
10.06.13
12:01
(0) ну вроде стандартное

Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", ВРЕГ(Сред(Стр, Поз, 1)))
8 Ненавижу 1С
 
гуру
10.06.13
12:01
(5) буква - символ некоего алфавита.
9 Dmitrith
 
10.06.13
12:01
(6) Тогда СтрокаСимволовЯкутии="..."
10 Михаил 1С
 
10.06.13
12:02
(0) Код символа не хочешь использовать?
11 Ненавижу 1С
 
гуру
10.06.13
12:02
(9) а потом Израиля и т.д. и т.п.
12 Ненавижу 1С
 
гуру
10.06.13
12:02
(10) хочу, но зачем?
13 Михаил 1С
 
10.06.13
12:02
Буквы они вместе расположены. Достаточно проверить - если Код от Код1 до Код2, то это буква.
14 IШаман
 
10.06.13
12:02
(10) Про якутские символы читал?
15 Ненавижу 1С
 
гуру
10.06.13
12:02
(13) не верю
16 Михаил 1С
 
10.06.13
12:03
(15) Ну вообще, да, я могу и наврать :)
Но цифры - они точно расположены вместе, я проверял :)

А тебе надо сразу для всех алфавитов?
17 IШаман
 
10.06.13
12:03
Можно что то типа предлженного тобой в ноль, только с обработкой исключения. Некрасиво - но зато просто.
18 Ненавижу 1С
 
гуру
10.06.13
12:03
да, код в (0) неверно работает для грузинских букв
19 Godofsin
 
10.06.13
12:04
Попытка
Образец = Число(НашСимвол);
Исключение
Сообщить("Ни хрена не цифра");
КонецПопытки;
20 fmrlex
 
10.06.13
12:04
СтрокаПроверки="!"№№;;%%::?*?*(())()+всевсесимволы"

Если Найти(ВРЕГ(Симв),СтрокаСимволов)=0 Тогда

Сообщить"Бинго!")
КонецЕсли;
21 Эмбеддер
 
10.06.13
12:04
(0) все-таки НРЕГ<>ВРЕГ чем не подходит?
22 IШаман
 
10.06.13
12:04
(18) А если что то типа Строка()
23 Михаил 1С
 
10.06.13
12:05
(19) не подойдет, ведь всякие кракозябры - не цифры и не буквы.
24 Эмбеддер
 
10.06.13
12:05
все вижу ответ в (18)
25 Ненавижу 1С
 
гуру
10.06.13
12:05
(21) см (18)
26 Гефест
 
10.06.13
12:06
ЭтоБуква = Вопрос("Это буква: " + Символ + "?",РежимДиалогаВопрос.ДаНет)
27 fisher
 
10.06.13
12:07
(8) Тогда я бы покурил таблицы символов на предмет подходящих закономерностей и функцию Символ().
28 fmrlex
 
10.06.13
12:07
+(20) Метод исключения.
29 Godofsin
 
10.06.13
12:08
(27) а чо? возможно взлетит
30 Kreont
 
10.06.13
12:08
небукв меньше, чем букв во всех алфавитах :)
Засунь все небуквы в строку и как то аналогично (20) проверяй

Хотя если по таблице аски кодов смотреть то цифри и спецсиволы по кодам лежат вначале, посмотри может и вхватит такоцй проверки.
31 Ковычки
 
10.06.13
12:10
(30) не прав
32 fisher
 
10.06.13
12:10
(27) + Тьфу, не Символ() - КодСимвола(). Стопудово там что-то такое с диапазонами можно сообразить.
33 Лефмихалыч
 
10.06.13
12:11
(6) без регэкспов хорошо не получится
34 Ненавижу 1С
 
гуру
10.06.13
12:12
(33) видимо 1с таки в новых движках встроит регулярки
35 kiruha
 
10.06.13
12:12
(33)
Все символы в массив или ТЗ с индексацией.
Потом проверка на вхождение - работает очень быстро
36 kiruha
 
10.06.13
12:13
Не хуже регэкспов
37 Лефмихалыч
 
10.06.13
12:13
(35) соответствие для этих целей придумано
38 Ковычки
 
10.06.13
12:13
?
39 Ковычки
 
10.06.13
12:14
0x02A6 - это буква или нет ?
40 Лефмихалыч
 
10.06.13
12:15
+(39) № - это буква?
41 kiruha
 
10.06.13
12:15
(37)
Пофиг Любая индексиркуемая конструкция
42 Ковычки
 
10.06.13
12:19
(34) встроено уже - ПолеHTML, конечно некузёво, но есть
43 Лефмихалыч
 
10.06.13
12:21
(42) нипонел. Как связано поле html документа с регэкспами?
44 Ненавижу 1С
 
гуру
10.06.13
12:21
(39) QChar::isLetter(0x02A6) //true
(40) QChar::isLetter('№') //false
45 Лефмихалыч
 
10.06.13
12:22
(44) с такими понятиями тебе либо ВК, которая будет возвращать то же самое, либо - в ТЗ все, что ты считаешь буквами.
46 kiruha
 
10.06.13
12:22
А если еще ТЗ с символами запихнуть в кэшируемую на сервере функцию - регэксп отдыхает

Итого не нужно
47 Jaap Vduul
 
10.06.13
12:30
(35)
На unicode.org таблицы символов (где указывается в т.ч. и категория символа, для букв - letter*) в зипованном виде десятки мегабайт занимают.
Так что такая методика имеет смысл, только если заранее ограничить круг возможных языков.