Моя программа читает текстовый файл, содержащий различные строки текста для файла настроек. Некоторые строки могли стать очень большими. В настоящее время размер буфера является 4 096 символами. Возможно, что некоторые строки могли превысить это, ли через злонамеренность или из-за различных факторов, работающих в рамках программы.
Текущие стандартные программы были довольно утомительны для записи, и теперь я хочу развернуть возможное содержание файла, который потребует большего количества этого утомительного повторяющегося кода. (Это для, настройки вводят файл, состоя из name value
пары и случайный заголовок раздела. Некоторые численные значения должны быть считаны как строки из-за многократно увеличенной точности).
Главное, которое я хочу, состоит в том, чтобы считать строку произвольной длины без переполнения буфера. Я только что обнаружил, что getline может сделать это для меня, но, является там для пользы небес библиотекой, которая просто сделает всех из этой скуки для меня?
править:
Я не хочу быть вынужденным поместить =
знак между именем и значениями, пробел должен быть достаточным как разделитель.
Широко распространенным я подразумеваю, что библиотека должна быть доступной в стандартных пакетах популярных дистрибутивов Linux.
Я знаю о libconfig, но это кажется полным излишеством для моих требований.
Мое предложение есть, DIY, так как это довольно легко.
и прочитайте пары значения имени с SSCANF
, как:
SSCANF (линия, «%». ]:% [^ \ n] ", ключ, значение);
Вы будете в безопасности, так как вы подсчитали Chars до SCCANF
.
Я знаю, что этот ответ опаздывает на год, но для любого читающего в будущем...
У меня была проблема, аналогичная вашей - попытка удалить тестовые базы данных в промежутке между тестами не удалась из-за того, что файл базы данных 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 анализатора значений ключа .
есть JWT .
-121--3549658-Я внес вклад в обновленную вилку Либини в CCAN . Он также содержит очень полезную реализацию словаря, а также несколько простых алгоритмов хеширования. Ржавый положил его в репо, поэтому я думаю, что я сделал достаточно хорошую работу по привлечению его на сегодняшний день и исправить несколько незначительных ошибок.
Можно найти последнюю версию библиотеки, если вы ткнуйте через это дерево , он содержит основную поддержку токена, а также основную поддержку транзакции (полезную для повторных чтений файлов конфигурации и возврата, если есть разбор ошибка). Он также содержит гораздо более обновленный набор модульных тестов.
Я больше не поддерживаю вилку, так как первоначальный автор Либини снова стал активным, однако модуль поддерживается в CCAN.