|
v7: Найти первый не русский символ | ☑ | ||
---|---|---|---|---|
0
beaver1971
09.07.15
✎
16:51
|
Как найти в строке позицию первого не русского символа (цифры, знака препинания и т.д.)?
|
|||
1
PR третий
09.07.15
✎
16:53
|
(0) Эээ... а в чем проблема?
|
|||
2
itlikbez
09.07.15
✎
16:55
|
(0) С помощью цикла.
|
|||
3
Garykom
гуру
09.07.15
✎
16:55
|
сначала уточнить понятие "не русский символ" = составить перечень всех символов которые ищем
|
|||
4
anatoly
09.07.15
✎
16:57
|
задача для школьной информатики.
|
|||
5
Волшебник
модератор
09.07.15
✎
16:57
|
(3) лучше наоборот - перечислить русские
|
|||
6
Garykom
гуру
09.07.15
✎
16:58
|
(5) проще для программиста, не значит проще для компьютера
|
|||
7
Casey1984
09.07.15
✎
16:59
|
(3) ВРЕГ(Символ) >= "А" И ВРЕГ(Символ) <= "Я"
|
|||
8
Fish
09.07.15
✎
16:59
|
(6) НЕ русских символов гораздо больше, чем русских, поэтому для компьютера тоже проще.
|
|||
9
spectre1978
09.07.15
✎
16:59
|
Для Сч = 1 По СтрДлина (ВходСтр) Цикл
Если Найти ("АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзиклмнопрстуфхцчшщъыьэюя", Сред (ВходСтр, Сч, 1))=0 Тогда Сообщить ("Нашли первый нерусский символ"); Прервать; КонецЕсли; КонецЦикла; |
|||
10
Casey1984
09.07.15
✎
16:59
|
(7) ой в (0) хотел ответить)
|
|||
11
Mikeware
09.07.15
✎
17:00
|
цифра "3" - это русский символ? или уже арабский?
|
|||
12
Garykom
гуру
09.07.15
✎
17:00
|
(8) да но как бы по кодам проще проверить на вхождения в интервалы, чем на невхождения
|
|||
13
Casey1984
09.07.15
✎
17:00
|
(11) зависит от валюты)
|
|||
14
Учитель
09.07.15
✎
17:00
|
(9) Это ты вручную набирал от "А" до "Я" буквы?
|
|||
15
Xapac
09.07.15
✎
17:01
|
а буква i? это так то тоже русский. только не современный.
|
|||
16
Fish
09.07.15
✎
17:01
|
(9) Буквы "Ёё" и "Йй" потерял.
|
|||
17
Mikeware
09.07.15
✎
17:01
|
(13) 0,5 - точно русский....
|
|||
18
Garykom
гуру
09.07.15
✎
17:02
|
(14) думать что русский программист знает наизусть алфавит это несколько самонадеянно... хотя если 1С-ник...
|
|||
19
Mirnin
09.07.15
✎
17:02
|
(14) Обработку написал же, зачем вручную.
|
|||
20
spectre1978
09.07.15
✎
17:03
|
(16) ну это как бы каждый может добавить по желанию чего хочет. Может, там и цифры надо. Описанный механизм именно тем и удобен, что чего хочешь то и добавил в константу, и не надо париться с кодами
|
|||
21
Timon1405
09.07.15
✎
17:03
|
регэксп [^а-я]/i не предлагать?
|
|||
22
Xapac
09.07.15
✎
17:04
|
мне вот интересно а если всякие там казахские или украинские кодировки. оно как? теже символы или другие, тока выглядят похоже?
|
|||
23
Волшебник
модератор
09.07.15
✎
17:04
|
(9) пропустил Й и Ё
|
|||
24
Волшебник
модератор
09.07.15
✎
17:05
|
(22) другие коды
|
|||
25
Xapac
09.07.15
✎
17:07
|
тада надо перевести всё в кодировку юникод и смотреть символы "Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F"
https://ru.wikipedia.org/wiki/Юникод |
|||
26
Ёпрст
09.07.15
✎
17:19
|
(0)
для клюшек, так, например Если OEMToAnsi(Буква) = Буква Тогда Сообщить("Не русский символ"); КонецЕсли; |
|||
27
beaver1971
09.07.15
✎
18:15
|
(26) есть строка, нужно найти позицию первого не русского символа....
Русские символы - только буквы русского алфавита |
|||
28
spectre1978
09.07.15
✎
18:19
|
(24) Не совсем так. У основных символов коды будут совпадать. Кириллица в юникоде начинается с 0x400 и заканчивается 0x527, и что туда входит - достаточно легко посмотреть, использовав стандартное виндовое приложение charmap.exe с каким-нибудь распространенным шрифтом типа Arial.
|
|||
29
spectre1978
09.07.15
✎
18:27
|
+ (28) уточнение: по 0x52F. Еще есть несколько небольших диапазонов ближе к концу таблицы, но основной набор от 400 до 52F.
|
|||
30
beaver1971
09.07.15
✎
18:31
|
ха....
Reg = СоздатьОбъект("VBScript.RegExp"); ... Reg.Pattern = "(^[А-Я|а-я]*)*"; ЧтоТоИщем = Reg.Execute(СтрокаПоиска); Нашли = СтрДлина(ЧтоТоИщем.Item(1).Value); Вот только N * 1000 вызовов VBScript.RegExp, причем N даже не двузначное число ((((( |
|||
31
romix
09.07.15
✎
18:35
|
||||
32
Casey1984
09.07.15
✎
18:43
|
(31) вот эт да, 1с - сила)
|
|||
33
Ёпрст
10.07.15
✎
09:11
|
(27) и ?
|
|||
34
aka AMIGO
10.07.15
✎
09:35
|
Для ы=1 По СтрДлина(СтрокаДляАнализа) Цикл
Сим = Сред(СтрокаДляАнализа, ы,1); Если КодСимв(Сим) <= 191 Тогда Сообщить("Найдено! "+Сим+ " поз.= "+ы); Прервать; КонецЕсли; КонецЦикла; |
|||
35
Timon1405
10.07.15
✎
09:54
|
(30) прежде чем "хакать" ознакомьтесь с документацией особенно по использованию звездочки. ваш регэксп работает мягко говоря неоптимально. вот код для снеговика:
Перем RegExp; Процедура КнопкаВыполнитьНажатие(Кнопка) Паттерн ="[^а-я]"; RegExp.Pattern = Паттерн; ПоискСлов= RegExp.Execute(СтрокаПоиска); Если ПоискСлов.count() Тогда Сообщить(ПоискСлов.Item(0).FirstIndex); КонецЕсли; КонецПроцедуры RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Истина; //Игнорировать регистр RegExp.Global = Ложь; //Поиск всех вхождений шаблона RegExp.MultiLine = Ложь; //Многострочный режим |
|||
36
beaver1971
10.07.15
✎
10:19
|
(35) СтрокаПоиска = "Аккумулятор СТ50";
Нужно увидеть число 12, как? ))) |
|||
37
beaver1971
10.07.15
✎
10:20
|
+(36) СтрокаПоиска = "Гвоздь 150 мм";
а тут результат - 7 |
|||
38
Timon1405
10.07.15
✎
10:22
|
(36) Индексы символов с 0 кагбе нумеруются, у вас неправильные ожидания от платформы. код из (35) у меня выдает 11 и 6, ЧЯДНТ?
|
|||
39
beaver1971
13.07.15
✎
06:52
|
(38) )))
СтрокаПоиска = "Аккумулятор"; |
|||
40
SiAl-chel
13.07.15
✎
08:43
|
(0)
НовыйТекст = "" Для Сч = 1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Сч); Если КодСимвола(Символ) <= 1040 И КодСимвола(Символ) >= 1103 Тогда НовыйТекст = НовыйТекст + Символ; Иначе Прервать; КонецЕсли; КонецЦикла; Предупреждение(НовыйТекст); |
|||
41
SiAl-chel
13.07.15
✎
08:44
|
+(40) Опечатался, вот тут правильней
НовыйТекст = "" Для Сч = 1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Сч); Если КодСимвола(Символ) >= 1040 И КодСимвола(Символ) <= 1103 Тогда НовыйТекст = НовыйТекст + Символ; Иначе Прервать; КонецЕсли; КонецЦикла; Предупреждение(НовыйТекст); |
|||
42
SiAl-chel
13.07.15
✎
08:45
|
+(41) :) Опять поторопился
НовыйТекст = "" Для Сч = 1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Сч, 1); Если КодСимвола(Символ) >= 1040 И КодСимвола(Символ) <= 1103 Тогда НовыйТекст = НовыйТекст + Символ; Иначе Прервать; КонецЕсли; КонецЦикла; Предупреждение(НовыйТекст); |
|||
43
Serg_1960
13.07.15
✎
09:27
|
Кто-то невнимательно читает - автору нужно найти позицию первого "нерусского" символа
|
|||
44
Timon1405
13.07.15
✎
10:35
|
(39) даже не смешно уже. ничего не выводит, а что должен выводить по вашему? если уж так нужно, отловите исключение в "Если ПоискСлов.count() Тогда"
|
|||
45
SiAl-chel
13.07.15
✎
14:58
|
(43) Тогда все еще проще
Позиция = 0; Для Сч = 1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Сч, 1); Если КодСимвола(Символ) < 1040 И КодСимвола(Символ) > 1103 Тогда Позиция = Сч; Прервать; КонецЕсли; КонецЦикла; Предупреждение(Позиция); |
|||
46
SiAl-chel
13.07.15
✎
14:59
|
+(45)
В условии вместо И поставить ИЛИ. |
|||
47
Злопчинский
13.07.15
✎
15:31
|
бяка
куча лишнего в коде . Для Сч = 1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Сч, 1); Если КодСимвола(Символ) < 1040 И КодСимвола(Символ) > 1103 Тогда Предупреждение(сч); Прервать; КонецЕсли; КонецЦикла; |
|||
48
SiAl-chel
20.07.15
✎
06:45
|
(47) "Нет предела совершенству"
|
|||
49
aka AMIGO
20.07.15
✎
07:45
|
(47) хмык.. а "слабо" посмотреть в (34) ??? :)
кстати, почему 1040 и/или 1103 ? вот эта простая штука возвращает все нужные коды и символы Процедура Сформировать() Для ы=32 По 255 Цикл Сообщить(""+ы+" "+Симв(ы)); КонецЦикла; КонецПроцедуры |
|||
50
zak555
20.07.15
✎
08:10
|
(49) в 8 используется utf-8
другая кодровка |
|||
51
zak555
20.07.15
✎
08:10
|
*кодировка
|
|||
52
aka AMIGO
20.07.15
✎
08:37
|
(50) ммм.. понятно, запомню :)
|
|||
53
spectre1978
20.07.15
✎
09:13
|
(50) По-моему, там используется обычный типовой для Windows UTF-16 Little Endian. UTF-8 чаще используется там где требуется экономия объема данных, а в приложениях обычно используют то что проще, т.е. UTF-16.
|
|||
54
Salimbek
20.07.15
✎
09:15
|
А пробел - это какой символ?
|
|||
55
spectre1978
20.07.15
✎
09:17
|
(54) Обычный, самый простой - U+0020. ASCII символы в юникоде совпадают по номерам со старой ASCII таблицей.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |