|
|
|
Русские буквы в строке | ☑ | ||
|---|---|---|---|---|
|
0
1с80
29.01.07
✎
12:08
|
Как проверить наличие русских букв в строке (и вообще каких либо символов из заданного набора недопустимых)?
|
|||
|
1
coder1cv8
29.01.07
✎
12:11
|
(0) регулярные выражения заюзать, например...
|
|||
|
2
1с80
29.01.07
✎
12:13
|
(1) не очень понял рекомендацию )
|
|||
|
3
Salvador Limones
29.01.07
✎
12:14
|
(2) RegExp заюзать, например...
|
|||
|
4
Истина
29.01.07
✎
12:14
|
По диапазонам кодов символов или сравнением из массива русских букоффф.
|
|||
|
5
coder1cv8
29.01.07
✎
12:16
|
(3) И я об этом...
(2) книжка Михайлова "Системное программирование...", там об этом есть немного... |
|||
|
6
Истина
29.01.07
✎
12:18
|
(1,3) Вы чего говорите то? Афтар спрашивает про буквы-символы, а не про слова. Зачем ему нечеткое сравнение???
|
|||
|
7
Ц_У
29.01.07
✎
12:19
|
Ну можно руками
Для каждго буква из строка цикл если буква = "а" тогда русская ... иначеесли буква = "я" - русская и т.д. |
|||
|
8
MikleV
29.01.07
✎
12:19
|
(6) дак там же вроде можно указать принадлежность алфавиту?
или я чего то путаю . |
|||
|
9
MikleV
29.01.07
✎
12:20
|
+ для всех букв в строке
|
|||
|
10
1с80
29.01.07
✎
12:25
|
(6) да, я спрашиваю про буквы-символы, нечеткое сравнение не надо )
(7) руками то понятно как, но не хочется ... думал, может какую встроенную функцию не заметил? |
|||
|
11
coder1cv8
29.01.07
✎
12:34
|
Не понимаю я в чём сложность поиска букв/символов с помощью RegExp?
|
|||
|
12
1с80
29.01.07
✎
14:08
|
Сложнотсь в том, что раньше с regexp не работал
Можно пример пример кода - как ее использовать? Шаблон что-то типа [^А-Я*] должен быть? |
|||
|
13
Ц_У
29.01.07
✎
14:09
|
Поиск не работает? или лень?
|
|||
|
14
1с80
29.01.07
✎
14:10
|
не нашел пока ...
|
|||
|
15
smaharbA
29.01.07
✎
14:15
|
//*******************************************
Процедура Сформировать() рег=СоздатьОбъект("VBScript.RegExp"); Рег.global=-1; Рег.ignorecase=-1; Рег.pattern="[а-я]"; Сообщить(Рег.test("есть русские bukovy")); Сообщить(Рег.test("netu russ bukov")); КонецПроцедуры |
|||
|
16
1с80
29.01.07
✎
14:17
|
спасибо
|
|||
|
17
Билли Г
29.01.07
✎
14:19
|
(15)Сообщить(Рег.test("how about Ё?"));
|
|||
|
18
smaharbA
29.01.07
✎
14:22
|
(17) не докапывайся дядя Билли
|
|||
|
19
smaharbA
29.01.07
✎
14:23
|
[а-яё]
|
|||
|
20
1с80
29.01.07
✎
14:26
|
все получилось, еще раз спасибо )
|
|||
|
21
Ц_У
29.01.07
✎
14:44
|
У меня вопрос, а можно ли узнать список этих самых букв?
|
|||
|
22
coder1cv8
29.01.07
✎
14:48
|
(21) можно
|
|||
|
23
Ц_У
29.01.07
✎
15:13
|
<code>
// И правда можно Procedure СодержитСимволыКириллицы(myString,myStat) RegExp=New COMОбъект("VBScript.RegExp"); RegExp.global=-1; RegExp.ignorecase=-1; RegExp.pattern="[а-яё]"; rezult=RegExp.execute(myString); if rezult.Count>0 then for i=0 to rezult.Count-1 do Message("Cимвол кириллицы = "+rezult.item(i).Value); enddo; else Message("Нет кириллических символов!"); endif; if myStat<>Undefined Тогда myStat=?(RegExp.test(myString),"Содержит","Не содержит"); endif; EndProcedure </code> |
|||
|
24
Ц_У
29.01.07
✎
15:35
|
<code>
Свойства объекта RegExp: Pattern Строка, содержащая регулярное выражение. Должна быть задана до использования методов RegExp IgnoreCase Тип Boolean. Если True, то игнорирует регистр символов, по-умолчанию False. Global Тип Boolean. Если True, то RegExp будет пытаться найти все возможные соответствия в строке. Multiline Тип Boolean. Если True, то RegExp будет поддерживать многострочный режим, по-умолчанию False. Методы объекта RegExp: Test(search-string) Тестирует строку search-string на соответствие паттерну. В случае удачи возвращает True. Replace(search-string, replace-string) Метод имеет два аргумента: строку, в которой будет осуществляться поиск и строку замены. Все найденные соответствия в строке search-string, заданные в Pattern, будут замещены значениями, указанными в строке замены replace-string. Excecute(search-string) Работает как Test, только все найденные соответвия в строке search-string, заданные в Pattern, будут возвращены в коллекции MatchCollection (см. ниже), содержащей объекты Match. Объект MatchCollection Содержит коллекцию объектов соответствия Match. Имеет два свойства: Count возвращает количество найденных соответствий, Item содержит объект Match с индексом от 0 до Count - 1. В VBScript RegExp версии 5.5 Item является свойством default, т.е. к свойству Item обращаться не обязательно, т.е. при обращении к объекту типа Matches Item можно опускать. Объект Match Объект Match (IMatch2) содержит найденное в строке соответствие, заданное в паттерне поиска. Имеет 4 свойства: Метод Назначение FirstIndex Позиция найденного соответствия в строке Length Длина найденной строки Value Текст найденного соответствия SubMatches Колекция субсоответствий. Субсоответствия задаются группировкой с помощью круглых скобок "(" и ")" (см. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jsgrpregexpsyntax.asp). Объект SubMatches Содержит коллекцию субсоответствий. Это как бы соответствия в соответствии. Имеет два свойства: Count - количество найденных субсоответствий и Item (default - можно опустить) возвращает текст найденного субсоответствия с индексом от 0 до Count - 1. Например, задан RegExp паттерн '(\d*)\.?(\d*)', строка поиска '123.45', тогда коллекция SubMatches вернет нам Count = 2, Item[0] = '123' и Item[1] = '45'. Примечание: при использовании библиотеки типов VBScript RegExp версии 1.0 свойство Item не является default и его нужно указывать явно. Также отсутсвуют свойство Multiline у объекта RegExp (IRegExp) и свойство SubMatches у объекта Match (IMatch). </code> |
|||
|
25
Ц_У
29.01.07
✎
15:37
|
//И еще раз
Свойства объекта RegExp: Pattern Строка, содержащая регулярное выражение. Должна быть задана до использования методов RegExp IgnoreCase Тип Boolean. Если True, то игнорирует регистр символов, по-умолчанию False. Global Тип Boolean. Если True, то RegExp будет пытаться найти все возможные соответствия в строке. Multiline Тип Boolean. Если True, то RegExp будет поддерживать многострочный режим, по-умолчанию False. Методы объекта RegExp: Test(search-string) Тестирует строку search-string на соответствие паттерну. В случае удачи возвращает True. Replace(search-string, replace-string) Метод имеет два аргумента: строку, в которой будет осуществляться поиск и строку замены. Все найденные соответствия в строке search-string, заданные в Pattern, будут замещены значениями, указанными в строке замены replace-string. Excecute(search-string) Работает как Test, только все найденные соответвия в строке search-string, заданные в Pattern, будут возвращены в коллекции MatchCollection (см. ниже), содержащей объекты Match. Объект MatchCollection Содержит коллекцию объектов соответствия Match. Имеет два свойства: Count возвращает количество найденных соответствий, Item содержит объект Match с индексом от 0 до Count - 1. В VBScript RegExp версии 5.5 Item является свойством default, т.е. к свойству Item обращаться не обязательно, т.е. при обращении к объекту типа Matches Item можно опускать. Объект Match Объект Match (IMatch2) содержит найденное в строке соответствие, заданное в паттерне поиска. Имеет 4 свойства: Метод Назначение FirstIndex Позиция найденного соответствия в строке Length Длина найденной строки Value Текст найденного соответствия SubMatches Колекция субсоответствий. Субсоответствия задаются группировкой с помощью круглых скобок "(" и ")" (см. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jsgrpregexpsyntax.asp). Объект SubMatches Содержит коллекцию субсоответствий. Это как бы соответствия в соответствии. Имеет два свойства: Count - количество найденных субсоответствий и Item (default - можно опустить) возвращает текст найденного субсоответствия с индексом от 0 до Count - 1. Например, задан RegExp паттерн '(\d*)\.?(\d*)', строка поиска '123.45', тогда коллекция SubMatches вернет нам Count = 2, Item[0] = '123' и Item[1] = '45'. Примечание: при использовании библиотеки типов VBScript RegExp версии 1.0 свойство Item не является default и его нужно указывать явно. Также отсутсвуют свойство Multiline у объекта RegExp (IRegExp) и свойство SubMatches у объекта Match (IMatch). |
|||
|
26
Ц_У
29.01.07
✎
18:08
|
//Вот так еще
Function StringParser(myString) RegExp=New COMОбъект("VBScript.RegExp"); RegExp.global=true; RegExp.ignorecase=false; RegExp.pattern="[А-ЯЁ|A-Z]"; rezult=RegExp.execute(myString); result = myString; if rezult.Count>0 then for i=0 to rezult.Count-1 do RegExp.pattern=rezult.item(i).Value; result=RegExp.Replace(result," "+Lower(rezult.item(i).Value)); enddo; endif; result = TrimAll(result); FirstChar = Left(result,1); OtherChar = Right(result,StrLen(result)-1); result=Upper(FirstChar)+OtherChar; return result; EndFunction |
|||
|
27
Ковычки
29.01.07
✎
18:58
|
(26) Че это такое ?
|
|||
|
28
k23
29.01.07
✎
19:47
|
КодСимвола
|
|||
|
29
Ковычки
29.01.07
✎
19:50
|
(28) в строке из 1000000 символов ?
|
|||
|
30
k23
29.01.07
✎
20:01
|
(29) да хоть из квадрилиона. нет других способов. регэкспы томозней на 2 порядка.
|
|||
|
31
у лю 427
29.01.07
✎
20:04
|
фигня...
Всем одноЭсникам слабо нарисовать алгоритм, который одной проверкой скажет, русская буква или иная.... |
|||
|
32
k23
29.01.07
✎
20:04
|
да и нехрен такие строки делать. сделал - думай как с ними работать будешь.
|
|||
|
33
k23
29.01.07
✎
20:06
|
(31) какой такой алгоритм, мудрый ты наш? цикл от 1 до 1000000 с проверкой в попадание в диапазона? это и пьяный первокласник нарисует без проблем.
|
|||
|
34
у лю 427
29.01.07
✎
20:10
|
(33) это только лохи проверяют диапазон...
P.S. если ты никогда не занимался именно системным программированием - ты не скажешь... Вообще то этот принцип широко используется в сист модулях... |
|||
|
35
k23
29.01.07
✎
20:16
|
(34) открой тайну, как это не лохи делают?
в сист модулях сидят какие-то волшебные алгоритмы? |
|||
|
36
у лю 427
29.01.07
✎
20:21
|
(35) обычно системные модули хорошо оптимизируются... ибо они вертятся постоянно...
Способов два - один через таблицы перекодировки (перекодирование осуществляется без оператора ЕСЛИ) второй - название не помню, но он довольно редкий... |
|||
|
37
MAG
29.01.07
✎
20:28
|
(35) По коду символа.
|
|||
|
38
k23
29.01.07
✎
20:29
|
(35) да хоть на асме с mmx - смысл один - посимвольный перебор с попаданием в значение. если не нравится - индексирование, регламентное либо при занесении/изменении. гугль десктоп, например и иже с ним. для таблиц памяти не напасёшся. юникод в базе (утф8).
|
|||
|
39
Ковычки
29.01.07
✎
20:29
|
(30) Да ну ?
|
|||
|
40
k23
29.01.07
✎
20:30
|
(39) может потестируем, что быстрей КодСимвола или вайсик внешний?
|
|||
|
41
Ковычки
29.01.07
✎
20:30
|
Друк ты горячишся сильно, хошь в 1С "открою" строку в 1 мГб ? можно и более...
|
|||
|
42
Ковычки
29.01.07
✎
20:30
|
(40) а че мне тестить, я и так знаю
|
|||
|
43
k23
29.01.07
✎
20:33
|
(41) да хоть в 10г, толко нужно мозгой думать - как ты там что-то искать будешь.
или скуль какой волшебник? он тебе твои 10г выгрузит в своп и будет посимвольно твою русскую букву искать. |
|||
|
44
у лю 427
29.01.07
✎
20:42
|
я не знаю, как работает поиск в скуле, но эти алгоритмы очень быстрые...
(37) похоже, сталкивался с таблицами перекодировки... |
|||
|
45
Ковычки
29.01.07
✎
20:48
|
(43) а че мне думать, от этого кони дохнут
|
|||
|
46
Ковычки
29.01.07
✎
20:51
|
Понятно, что в конечном итоге кодсимв, но это не тот кодсимв
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |