LINUX.ORG.RU

Посоветуйте по разбору структуры файла


0

0

У меня есть файл следующего формата:

Description\t (1.2)\t 27/02/06\t cli {1\t 1\t 0} {cli:1\t cli:1\t cli:0} \t 50\t "Result's string"\t 0\t 1\t 2\t 3\t 50 100\n

Сейчас разбираю строку с помощью strtok:

//Element's name #1
pch = strtok(NULL, SEPARATE_SIGN_SPACE);
fprintf(fp_output, "%s ", pch);

//Element's name #2
pch = strtok(NULL, SEPARATE_SIGN_RIGHT_BRACKET);
fprintf(fp_output, "%s}", pch);

и так до последнего поля. Если бы поля были одинаковой длины - все было бы не так плохо, но первое и последее поле не постоянной длинны, а изменяемой. Например, поле может содержать набор символов: ааа, а следующая строка может быть ddddd. Разбирать такие строки по полям не самый лучший выход. Можно ли запихнуть строку такого формата целиком в сруктуру? Я думаю, что нет и надо просто писать функцию, которая разбирает строку.


1. strtok не повторно входимая функция. Это следует иметь в виду.

2. strtok всё равно, какой длины поле. Играет роль только количество полей.

kkk ★★
()

Если есть возможность парсь пайтоном .

kitov ★★★
()

strtok_r есть в позикс.

если скорость некритична можешь popen("...awk...") вызвать, чтобы привести строку в более парсабельный формат

dilmah ★★★★★
()

А regex-ы вам чем не подходят? В рамки регулярной грамматики это все вполне укладывается, вроде бы (никаких рекурсивных структур я не вижу).

anonymous
()

> и так до последнего поля. Если бы поля были одинаковой длины - все было бы не так плохо, но первое и последее поле не постоянной длинны, а изменяемой. Например, поле может содержать набор символов: ааа, а следующая строка может быть ddddd. Разбирать такие строки по полям не самый лучший выход. Можно ли запихнуть строку такого формата целиком в сруктуру? Я думаю, что нет и надо просто писать функцию, которая разбирает строку.

Несколько раз перечитал -- ничего не понял. Какая разница, сколько там символов?

Непосредственно в структуру? Можно. Если размер поля лимитирован. А нужно? Зачем?

fk0
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.