|
|
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Допустим у нас есть список, в котором разделителем является запятая Код: plaintext 1. Но вдруг у нас один из айтемов содержит запятую и как мы понимаем она может нам поломать десерию (анпак) Код: plaintext 1. Итого поломка Код: plaintext 1. Такие поломки обычно решаются эскипированием. Код: plaintext 1. и перед разбором мы заменяем разночтение на безопасную комбинацию Код: plaintext 1. Пока все ок. Идем дальше Код: plaintext 1. Итого поломка Код: plaintext 1. Как в этом случае провести эскипацию для n-вложенности чтобы 1) потом можно было разобрать рекурсивно 2) не использовать спец.символов 3) критерий рекурсивности (признак, флаг) был бы в самом формате и тоже был бы без спец.символов Под спец.символами понимаются символы, которых невозможно набрать с клавиатуры простым нажатием, а можно задать только через хекс-код например. Что-то типа 0x05 Такие символы по условию задачи использовать нельзя. В итоге последний пример должен распарситься в Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 12:43 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Lumix, a, b, c, ... (b = 1,2 -> 1,,2 (1 = у,ф -> у,,ф) = у,,ф,,2 ) = a, у,,ф,,2, c, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 14:20 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
ALKIR= a, у,,ф,,2, c, ... Это после парсинга превращается в такое Код: plaintext 1. 2. 3. 4. 5. 6. 7. А по условию задачи должно в такое Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:31 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
= a, у,,,,ф,,2, c, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 17:08 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
?= a, у,,,,ф,,2, c, ... А как такие штучки разбирать алгоритмически. Ладно мы тут видим, что два уровня вложенности, а ведь в буфер, который мы получаем мы там не видим. Я пока не могу придумать как произвести разбор "с низов", а как такое распарсить идя "сверху" пока придумать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 17:21 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Lumix, Может я конечно суть вопроса не понял, но... Разве такой вариант не подойдёт? - определяемся с символом для эскэйпирования (например обратный слэш). Определяемся с критерием вложенности (например повышепие уровня символ "<", а понижение - ">"). При сериализации массива эскэйпируем данные символы и получаем однозначный результат простой для обратного преобразования (например "а, б, <<1, 2>, \<input\>>, д"). Может не в тему, но если я правильно понял, то я бы делал именно так. Кстати, разумеется символ \ тоже эскэйпируем так \\. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 23:04 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
?= a, у,,,,ф,,2, c, ... Опять же, если верно понял задачу, то такой вариант не подходит. Представим, что у нас есть 2 списка (многомерных): Код: php 1. 2. 3. 4. 5. 6. 7. и Код: php 1. 2. 3. 4. 5. оба списка будут преобразованы в ту же строку "a, у,,,,ф,,2, c", а это уже не верно (так как мы не будем знать какой вариант верный). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 23:50 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
ну и сам парсер к моему варианту (хотя думаю и лучше можно написать... на быструю руку набросал. на php): Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Кстати, тут экранирующий символ "/". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 00:58 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Lumix, есть общие правила к примеру по работе с Comma-Separated Values Вот фрагмент примера CSV из Википедии. Код: html 1. 2. 3. 4. Алгоритм сохранения CSV такой. Каждый field (item) перед тем как положить в СSV проверяется на наличе внутри сплиттера (это запятая в данном примере). Если сплиттер есть то айтем закрывается в кавычки. Если внутри айтема есть кавычки то они удваиваются. При парсинге - Наобророт. Убираем дубликаты кавычек. И берём филды атомами там где есть левая и правая кавычка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 02:17 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Недостаток такого способа таков что если мы внутри одного айтема СSV кладём другой CSV-файл (я видел и такие извращения) то объём текста многократно растёт. А если эту операцию повторить рекурсивно то мы раздуем текст до терабайтов. Впрочем той-же болезнью болеет и XML. Если внутрть Value-of тега пихать другой XML то происходит враппинг с еще большими потерями free-space на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 02:19 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
maytonто происходит враппинг с еще большими потерями free-space на диске. Да, это и есть суть задачи, которая лежит в основе этой темы. Насколько корректно утверждать, что единственным спасителем фриспейса в условиях сильнейшей рекурсивной вложенности вместо маркера-разделителя порций является только хедер с маркером длины порции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 14:52 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Насколько корректно утверждать, что не существует методов эскипации, устойчивой к рекурсивной вложенности формата без увеличения объема по методу сложных процентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 14:54 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Lumix, HDLC битстаффинг рассматривал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 15:27 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
ИзопропилLumix, HDLC битстаффинг рассматривал? Не могу сообразить как битстаффинг замутить на буквах, чтобы руками было удобно печатать. Код: plaintext 1. Или бутстафферы предлагают использовать в качестве нуля точку, а в качестве единицы запятую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 16:06 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Програмёрхотя думаю и лучше можно написать... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1) можно ли такой формат распарсить попилом или регулярником или он разбирается только рекурсивно (с помощью стека)? 2) что делать с наличием @zpt, @obr, @cbr в исходных реальных данных? Запрещать, вырезать или тоже эскипировать? Ведь так можно эскипироваться до бесконечности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 16:19 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
LumixИзопропилLumix, HDLC битстаффинг рассматривал? Не могу сообразить как битстаффинг замутить на буквах, чтобы руками было удобно печатать. Код: plaintext 1. Или бутстафферы предлагают использовать в качестве нуля точку, а в качестве единицы запятую? Неправильно. Как тебе уже сказали выше разделители удваиваются на каждый уровнь вложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 16:27 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
LumixПрограмёрхотя думаю и лучше можно написать... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1) можно ли такой формат распарсить попилом или регулярником или он разбирается только рекурсивно (с помощью стека)? 2) что делать с наличием @zpt, @obr, @cbr в исходных реальных данных? Запрещать, вырезать или тоже эскипировать? Ведь так можно эскипироваться до бесконечности... по поводу исходника (примера), я не понял что это :). То есть, я понял, что это что-то основанное на моём сообщении, но вот для чего эта таблица замен была введена и эти замены использованы - не понял. по пунктам: 1. Я пробовал что-то подобное без рекурсии сделать, но не получилось 2. Как уже написал, просто не понял сути. Поясните пожалуйста. в моём случае это смотрелось бы так (если использовать ваш синтаксис, но вместо замен использовать экранирование): 1\, \(1\),((1\, \(1\),2\, \(2\)),2\, \(2\)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 16:38 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Програмёр(если использовать ваш синтаксис, но вместо замен использовать экранирование): 1\, \(1\),((1\, \(1\),2\, \(2\)),2\, \(2\)) Вы просто работаете вот на такой таблице замен Код: plaintext 1. 2. 3. 4. Подобный стиль эскипирования плох тем, что нахер убивает глаза того, кто будет читать такой формат глазами. Я например очень сильно с трудом замечаю, где у вас запятая эскипирована, а где нет. При обработке вашего формата вручную очень и очень легко ошибиться просто поставив бекслеш не перед той скобкой. ПрограмёрЯ пробовал что-то подобное без рекурсии сделать, но не получилось Понятно. Я жду, что может быть кто-нибудь посоветует какой-то ленточный формат, допускающий распарсивания в дерево без рекурсии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 17:03 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
LumixПрограмёр(если использовать ваш синтаксис, но вместо замен использовать экранирование): 1\, \(1\),((1\, \(1\),2\, \(2\)),2\, \(2\)) Вы просто работаете вот на такой таблице замен Код: plaintext 1. 2. 3. 4. Подобный стиль эскипирования плох тем, что нахер убивает глаза того, кто будет читать такой формат глазами. Я например очень сильно с трудом замечаю, где у вас запятая эскипирована, а где нет. При обработке вашего формата вручную очень и очень легко ошибиться просто поставив бекслеш не перед той скобкой. Теперь понял. То что для чтения человеком неудобно - это да. Но исключает описанную Вами проблему. Просто таблица замен немного больше, чем Вы описали: Код: plaintext 1. 2. 3. 4. 5. то есть достаточно экранировать 4 символа и всё. LumixПрограмёрЯ пробовал что-то подобное без рекурсии сделать, но не получилось Понятно. Я жду, что может быть кто-нибудь посоветует какой-то ленточный формат, допускающий распарсивания в дерево без рекурсии. Не думаю что вообще распарсивание в дерево возможно без рекурсии. Хотя авось кто придумает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 17:12 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Есть ^^-последовательности, есть триграфы языка це. Задача-то какая? Что во что надо завернуть, если слегка перефразировать профессора Преображенского? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 18:11 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗадача-то какая? Ленточная сериализация сетей только с помощью гуманоидных символов и безрекурсионный алгоритм распарсивания этой ленты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 21:48 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Програмёр Код: plaintext 1. 2. 3. 4. 5. то есть достаточно экранировать 4 символа и всё. Подскажите как по вашей модели экранировать Код: plaintext 1. если Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 21:51 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
LumixПрограмёр Код: plaintext 1. 2. 3. 4. 5. то есть достаточно экранировать 4 символа и всё. Подскажите как по вашей модели экранировать Код: plaintext 1. если Код: plaintext 1. Извините, не понял что требуется. просто экранировать данную строку для записи её как элемента (или части элемента) списка? Если да, тогда давайте определимся всё же, что символ экранирования лучше использовать "/", что бы не дублировать его в строках (ведь \ уже является символом экранирования в строках). Тогда: Код: php 1. 2. 3. 4. 5. на выходе получим: Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 23:18 |
|
||
|
Обратный эскипированный разбор без спец.символов
|
|||
|---|---|---|---|
|
#18+
Lumix, у тебя дефект постановки. У тебя вообще не список с разделителями. У тебя должно быть 100% дерево. Тогда твои детские болезни сразу пройдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 23:44 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38346142&tid=1341730]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
383ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 662ms |

| 0 / 0 |
