Существует ли широко распространенная библиотека C для чтения пар имя/значение из файла?

Моя программа читает текстовый файл, содержащий различные строки текста для файла настроек. Некоторые строки могли стать очень большими. В настоящее время размер буфера является 4 096 символами. Возможно, что некоторые строки могли превысить это, ли через злонамеренность или из-за различных факторов, работающих в рамках программы.

Текущие стандартные программы были довольно утомительны для записи, и теперь я хочу развернуть возможное содержание файла, который потребует большего количества этого утомительного повторяющегося кода. (Это для, настройки вводят файл, состоя из name value пары и случайный заголовок раздела. Некоторые численные значения должны быть считаны как строки из-за многократно увеличенной точности).

Главное, которое я хочу, состоит в том, чтобы считать строку произвольной длины без переполнения буфера. Я только что обнаружил, что getline может сделать это для меня, но, является там для пользы небес библиотекой, которая просто сделает всех из этой скуки для меня?

править:

Я не хочу быть вынужденным поместить = знак между именем и значениями, пробел должен быть достаточным как разделитель.

Широко распространенным я подразумеваю, что библиотека должна быть доступной в стандартных пакетах популярных дистрибутивов Linux.

Я знаю о libconfig, но это кажется полным излишеством для моих требований.

7
задан James Morris 25 January 2010 в 12:03
поделиться

3 ответа

Мое предложение есть, DIY, так как это довольно легко.

  • Прочитайте каждую строку
  • COUNT CHARS до вашего сепаратора и после того, как ваш сепаратор
  • выделяет буферы
  • и прочитайте пары значения имени с SSCANF

    , как:

    SSCANF (линия, «%». ]:% [^ \ n] ", ключ, значение);

Вы будете в безопасности, так как вы подсчитали Chars до SCCANF .

1
ответ дан 7 December 2019 в 12:20
поделиться

Я знаю, что этот ответ опаздывает на год, но для любого читающего в будущем...

У меня была проблема, аналогичная вашей - попытка удалить тестовые базы данных в промежутке между тестами не удалась из-за того, что файл базы данных SQLite остался открытым. Я отследил проблему в коде до объекта SQLiteDataReader, который не был явно закрыт.

SQLiteDataReader dr = cmd_.ExecuteReader();
while (dr.Read())
{
    // use the DataReader results
}
dr.Close();  //  <-- necessary for database resources to be released
-121--2285490-

Рекомендуется использовать Jindent , который является «простым инструментом отступа Java с использованием Emacs». Это бесплатный сценарий, который является частью проекта Птолемея в Беркли.

-121--4322296-

Посмотрите в libini , звучит правильно. Она довольно старая и не совсем переживает бешеное развитие, но если она уже работает на вашу проблему, это должно быть хорошо.

Более актуальной библиотекой с множеством других преимуществ является glib , она имеет API анализатора значений ключа .

3
ответ дан 7 December 2019 в 12:20
поделиться

есть JWT .

-121--3549658-

Я внес вклад в обновленную вилку Либини в CCAN . Он также содержит очень полезную реализацию словаря, а также несколько простых алгоритмов хеширования. Ржавый положил его в репо, поэтому я думаю, что я сделал достаточно хорошую работу по привлечению его на сегодняшний день и исправить несколько незначительных ошибок.

Можно найти последнюю версию библиотеки, если вы ткнуйте через это дерево , он содержит основную поддержку токена, а также основную поддержку транзакции (полезную для повторных чтений файлов конфигурации и возврата, если есть разбор ошибка). Он также содержит гораздо более обновленный набор модульных тестов.

Я больше не поддерживаю вилку, так как первоначальный автор Либини снова стал активным, однако модуль поддерживается в CCAN.

1
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: