[Erlang]Как нынче принято хранить строки внутри приложения?
От: Mr.Cat  
Дата: 06.07.09 23:45
Оценка:
Обратил внимание, что модуль re не может нормально работать со строками, которые представлены списками символов (которые, например, получаются, если просто в консоли закавычить русские буквы) и прекрасно работает со списками utf8-байт.
Т.е. для одного и того же регекспа (он содержит только латиницу) получаю:
17> re:run("abcd", Re).
nomatch
18> re:run("абвг", Re).
** exception error: bad argument
     in function  re:run/2
        called as re:run([1072,1073,1074,1075],
                         {re_pattern,1,0,
                                     <<69,82,67,80,97,0,0,0,0,2,0,0,7,0,0,0,
                                       1,0,0,0,34,0,34,...>>})

Т.е., получается, для внутреннего представления строк стоит юзать utf-8 бинари, либо списки utf8-байт?

Если имеет значение:
Erlang R13B (erts-5.7.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Re: [Erlang]Как нынче принято хранить строки внутри приложен
От: Odobenus Rosmarus  
Дата: 07.07.09 01:32
Оценка: 12 (1)
Здравствуйте, Mr.Cat, Вы писали:

MC>Обратил внимание, что модуль re не может нормально работать со строками, которые представлены списками символов (которые, например, получаются, если просто в консоли закавычить русские буквы) и прекрасно работает со списками utf8-байт.

MC>Т.е. для одного и того же регекспа (он содержит только латиницу) получаю:
MC>
17>> re:run("abcd", Re).
MC>nomatch
18>> re:run("абвг", Re).
MC>** exception error: bad argument
MC>     in function  re:run/2
MC>        called as re:run([1072,1073,1074,1075],
MC>                         {re_pattern,1,0,
MC>                                     <<69,82,67,80,97,0,0,0,0,2,0,0,7,0,0,0,
MC>                                       1,0,0,0,34,0,34,...>>})
MC>

MC>Т.е., получается, для внутреннего представления строк стоит юзать utf-8 бинари, либо списки utf8-байт?

MC>Если имеет значение:

MC>
MC>Erlang R13B (erts-5.7.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
MC>



14> {ok,E3} = re:ucompile("asd*",[]). 
{ok,{re_pattern,0,0,
                <<69,82,67,80,53,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,97,0,115,
                  ...>>}}
15> re:urun("Привет",E3,[]).         
nomatch

12> {ok,E2} = re:ucompile("Прив*",[]).
{ok,{re_pattern,0,0,
                <<69,82,67,80,63,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,208,0,
                  208,...>>}}
13> re:urun("Привет",E2,[]).          
{match,[{0,8}]}
--
Odobenus Rosmarus, hochpersonlich
Re[2]: [Erlang]Как нынче принято хранить строки внутри прило
От: Mr.Cat  
Дата: 07.07.09 05:37
Оценка:
Здравствуйте, Odobenus Rosmarus, Вы писали:
OR>
14>> {ok,E3} = re:ucompile("asd*",[]). 
OR>{ok,{re_pattern,0,0,
OR>                <<69,82,67,80,53,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,97,0,115,
                  ...>>>}}
15>> re:urun("Привет",E3,[]).         
OR>nomatch

12>> {ok,E2} = re:ucompile("Прив*",[]).
OR>{ok,{re_pattern,0,0,
OR>                <<69,82,67,80,63,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,208,0,
OR>                  208,...>>}}
13>> re:urun("Привет",E2,[]).          
OR>{match,[{0,8}]}
OR>


Хе, а где эта штука задокументирована? Ни в локальном мане, ни тут ucompile/urun не упоминается.
Re[3]: [Erlang]Как нынче принято хранить строки внутри прило
От: Odobenus Rosmarus  
Дата: 07.07.09 07:49
Оценка: :)
Здравствуйте, Mr.Cat, Вы писали:

MC>Хе, а где эта штука задокументирована? Ни в локальном мане, ни тут ucompile/urun не упоминается.


не могу знать, вашеблагородие!

Я обычно в исходниках смотрю.
--
Odobenus Rosmarus, hochpersonlich
Re[4]: [Erlang]Как нынче принято хранить строки внутри прило
От: Mr.Cat  
Дата: 07.07.09 10:31
Оценка:
Здравствуйте, Odobenus Rosmarus, Вы писали:
OR>Я обычно в исходниках смотрю.
Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).
Re[5]: [Erlang]Как нынче принято хранить строки внутри прило
От: Mr.Cat  
Дата: 07.07.09 19:21
Оценка:
Здравствуйте, Mr.Cat, Вы писали:
MC>Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).

Только они, похоже, глючно это делают.
Re[6]: [Erlang]Как нынче принято хранить строки внутри прило
От: Mr.Cat  
Дата: 07.07.09 23:51
Оценка:
А, ну и xmerl я так и не смог заставить нормално принимать на вход списки символов. То scan сыпется, то export. Так что в качестве внутреннего представления сейчас использую списки utf8-байт.
Re[6]: [Erlang]Как нынче принято хранить строки внутри прило
От: Odobenus Rosmarus  
Дата: 08.07.09 01:47
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Mr.Cat, Вы писали:

MC>>Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).

MC>Только они, похоже, глючно это делают.


А в чем глючность? чтобы знать на будущее?
--
Odobenus Rosmarus, hochpersonlich
Re[7]: [Erlang]Как нынче принято хранить строки внутри прило
От: Mr.Cat  
Дата: 08.07.09 10:31
Оценка:
Здравствуйте, Odobenus Rosmarus, Вы писали:
OR>А в чем глючность? чтобы знать на будущее?

Я вполне могу ошибаться (в том плане, что это я сам где-то накосячил), но у меня получалось, что urun возвращал некорректное значение позиции, с которой начинается матч.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.