Имя: Пароль:
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*) в зипованном виде десятки мегабайт занимают.
Так что такая методика имеет смысл, только если заранее ограничить круг возможных языков.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn