Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
#1

Парсинг файла .cnf - C++

09.01.2014, 07:05. Просмотров 887. Ответов 24
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане.
Помогите, пожалуйста, конкретным кодом к вот такой подзадаче: нужно прочитать .cnf файл - структурированный файл представления КНФ (вроде не отличается от .txt), который внутри имеет такую структуру:
с \
с \
с строки комментариев, могут и отсутствовать
с /
с /
p cnf 10 15 //15 значит что вниз будет еще 15 строк - 15 клауз, 10 - 10 конъюнктов
1 2 0 //0 - признак конца строки
-2 4 8 0
3 7 0
...
-7 9 0

Нужно прочитать этот файл, проигнорировать/удалить комментарии, записать 10 в переменную А, 15 в переменную В, а каждую следующую строку в двумерный массив int из 15 строк и не суть важно скольких столбцов (их количество в каждой строке может быть разное).
Очень надеюсь на вашу помощь - это нужно для диплома, который мне через 5 дней защищать((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 07:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг файла .cnf (C++):

Парсинг файла - C++
Вот открываю через FILE*, файл ввида "test" { "test1" "test1_1" "test2" "test2_1" "test3" "test3_1" ...

Парсинг файла - C++
Загружаю файл в string, строка в файле только одна, так что масив ненужен. В чем задача стоит? Содержимое файла такое: {"параметр_1":...

Парсинг строк из файла - C++
Имеется файл с содержанием 3 Text Text2 Text3

Парсинг из файла и суммирование столбца - C++
В файле "data.txt" записаны 2 столбца чисел. Написать функцию, которая находит сумму чисеол во 2 столбце. (столбцы разделены ' ') Заранее...

Парсинг файла игнорирует числа - C++
Всем добрый день. Пытаюсь прочитать данные из файла 3D модели в формате OBJ. bool L_ObjData::LoadFromFile(string FileName) { ...

Парсинг текстового файла в map - C++
Здравствуйте! Подскажите, пожалуйста, как парсить текстовый файл в map. Например, есть файл, в котором записано следующее: 1 a 2 b 3...

24
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 07:32 #2
То есть, найти в файле строки, которые начинаются с: p cnf, прочитать третье слово(число, unsigned int(?)) такой строки в A, четвёртое(число, unsigned int(?)) в B, данные (числа, int(?)), которые следуют за этой строкой (B строк, конец строки 0, количество чисел в строке незвестно, но общее количество чисел для записи в массив равно A(?)), записать в двумерный массив под A(?) элементов. Так?
1
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
09.01.2014, 07:56  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
То есть, найти в файле строки, которые начинаются с: p cnf, прочитать третье слово(число, unsigned int(?)) такой строки в A, четвёртое(число, unsigned int(?)) в B, данные (числа, int(?)), которые следуют за этой строкой (B строк, конец строки 0, количество чисел в строке незвестно, но общее количество чисел для записи в массив равно A(?)), записать в двумерный массив под A(?) элементов. Так?
Верно. В качестве уточнения: строка p cnf одна, глубина двумерного массива фиксированная, равна В, ну из уже увиденных фалов кнф в одной строке больше 3-4 чисел, имеющих значение, не бывает. А вот значение А порядка 65000-70000, для В = 200000-250000. Т.е. массив получится примерно 200000х3 или 200000х4
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 08:22 #4
Цитата Сообщение от Victorianec Посмотреть сообщение
из уже увиденных фалов кнф в одной строке больше 3-4 чисел, имеющих значение, не бывает.
Насчёт 0 - признак конца строки. Строки с числами заканчиваются '\n', т.е.: 1 2 0 '\n'-2 4 8 0 '\n..., или (без пробела перед '\n') 1 2 0'\n'-2 4 8 0'\n..., или без '\n': 1 2 0 -2 4 8 0 ... ?
1
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
09.01.2014, 08:45  [ТС] #5
затрудняюсь ответить. Во вложении файл для примера
0
Вложения
Тип файла: rar gus-md5-16.rar (883.5 Кб, 8 просмотров)
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 08:52 #6
Непонятно что выложили. Почему ярлык?
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.01.2014, 10:21 #7
Если я правильно понял ваше описание, достаточно выделить память под одномерный массив A[k] (для вашего файла k = 70139 * 228634) и прочесть в него все строки подряд - без разделителей. Эту же память можно представить как двумерный массив A[i][j], используя переход k = 70139 * i + j. (i = 0..228633, j = 0..70138). Пропуск комментариев и парсинг единственной строчки с размерностями тривиален.
0
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
09.01.2014, 10:47  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Непонятно что выложили. Почему ярлык?
это не ярлык, это файл, открывается, к примеру, блокнотом
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 11:13 #9
Цитата Сообщение от Victorianec Посмотреть сообщение
это не ярлык, это файл, открывается, к примеру, блокнотом
Скачайте и проверьте, как он открывается.

Добавлено через 2 минуты
После извлечения, этот, якобы, файл вот так выглядит.
0
Миниатюры
Парсинг файла .cnf  
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 11:14 #10
Если это не ярлык, то тогда что?
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.01.2014, 11:24 #11
Цитата Сообщение от alsav22 Посмотреть сообщение
тогда что?
Это RAR-архив c текстовым файлом внутри. Проверьте, что у вас не было ошибки при скачивании.

Код
Archive: gus-md5-16.rar
Details: RAR 4

 Attributes      Size    Packed Ratio   Date   Time   Checksum  Name
----------- ---------  -------- ----- -------- -----  --------  ----
    ..A....   4226486    904626  21%  30-03-09 17:12  ABFA9464  gus-md5-16.cnf
----------- ---------  -------- ----- -------- -----  --------  ----
              4226486    904626  21%                            1
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 11:26 #12
В чём дело с этим файлом не пойму. Расширение, почему-то, у него не видно. Приделываю к нему .txt, блокнотом не открывается, hex-редактором открывается, но с расширением .cnf.

Добавлено через 2 минуты
Цитата Сообщение от gazlan Посмотреть сообщение
Проверьте, что у вас не было ошибки при скачивании.
Размер соответствует: 4226486.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.01.2014, 11:28 #13
Цитата Сообщение от alsav22 Посмотреть сообщение
но с расширением .cnf
Это, как раз, законно - оно, и в самом деле, '.cnf'

Все это удобно делать в FAR - и распаковывать, и смотреть, и редактировать.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 11:42 #14
Цитата Сообщение от gazlan Посмотреть сообщение
Все это удобно делать в FAR - и распаковывать, и смотреть, и редактировать.
Кому удобдо в FAR, пусть и делает. Такой хоккей нам не нужен...

Добавлено через 7 минут
В самом WinRAR получилось файл просмотреть. Ответ на свои вопросы получил: в конце каждой строки '\n' (сразу после 0).

Добавлено через 1 минуту
Цитата Сообщение от gazlan Посмотреть сообщение
Если я правильно понял ваше описание, достаточно выделить память под одномерный массив A[k] (для вашего файла k = 70139 * 228634)
ТС молчит, какой ему массив нужен, одномерный или двумерный.
1
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
09.01.2014, 11:44  [ТС] #15
Мне для дальнейшей обработки (написания компактного ГА) нужно чтобы каждое значимое число строки было отдельно и доступно. Поэтому мне нужен двумерный массив.
0
09.01.2014, 11:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2014, 11:44
Привет! Вот еще темы с ответами:

typdef struct + парсинг из файла - C++
Собственно такая задача : Надо создать структуру, на основе чтения из файла. От вас готового когда не прошу, если можно - просты ссылки...

Чтение юникодного файла и парсинг строки - C++
Не удается нормально считать файл. значения читаются с нуль пробелом, как их распарсить и сконвертировать в обычные типы данных?? вот...

Считывание и парсинг данных с текстового файла - C++
Как правильно считать такую строку с етого файла? 3 circle 3.0 3.0 5.0 square 0.0 0.0 0.0 4.0 4.0 4.0 4.0 0.0 triangle 3.0 3.0 0.0...

Парсинг файла / общие советы / проектирование - C++
Здравствуйте, товарищи! Необходимо "пропарсить" файл, имеющий расширение doc. Файл большой, более 32к страниц (акцентирую на этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru