LINUX.ORG.RU

Считывание данных из файла


0

0

Задача. Есть программа под Windows на языке C++. Один из блоков программы отвечает за считывания начальных данных из стартового текстового (ini) файла. Задача заключается в адаптации этого блока под Linux. В исходном Windows-варианте блока содержаться команды:

(int) GetPrivateProfileInt() GetPrivateProfileString()

Вопросы. Как реализовать работу блока по считыванию информации под Linux:

-какие нужно применить (или не нужно ничего менять?) аналоги для указанных команд Windows-версии программы

-существуют ли какие-нибудь другие способы реализовать считывание начальных данных из текстового файла

QtConfig(в qt4, про 3 не знаю) умеет работать с ini-файлами.

gaa ★★
()
Ответ на: комментарий от irq

Если сейчас конфиг использует INI-формат, то XML для него избыточен.

Sphinx ★★☆☆
()
Ответ на: комментарий от BreadFan

BreadFan: Спасибо за ответ. Однако, если это возможно, хотелось бы больше конкретики, а именно:

Вот сруктура ини файла: ; info [data] T=5 ; info

Как считать значение T=5 в переменную T?

priester
() автор топика
Ответ на: комментарий от irq

irq: Что правда, то правда! Даже не пытался! Если возможно, напиши, пожалуйста, как реализовать задачу с помощью xml

priester
() автор топика
Ответ на: комментарий от priester

Структура ini-файла

;info

[data]

T = 5 ; info

Нужно считать информацию из ini-файла T = 5 в переменную Te

priester
() автор топика
Ответ на: комментарий от priester

>> irq: Что правда, то правда! Даже не пытался! Если возможно, напиши, пожалуйста, как реализовать задачу с помощью xml

Ничего в этом сложного нет. Описываю алгоритм. В последний раз использовал QtXml из Qt4, поэтому буду объяснять на нем.

Пусть есть xml-файл 

...
<int>
    <name1 Value=50 />
    <name2 Value=50 />
    <name3 Value=50 />
</int>

...

необходимо сделать что-то вроде этого:

const intTags[] = { "name1", "name2", "name3" };

QDomElement x_int = x_config.firstChildElement("int");
for( int i=0; i<3; i++)
   intSettings[i] =  (x_int.firstChildElement(intTags[i]).attribute("value","_значение_по_умолчанию_
например_0").toLong();

ЗЫ За форматирование извиняюсь
Надеюсь все понятно. Как видишь, задача тривиальна =)

irq
()
Ответ на: комментарий от irq

Опять поналезло быдло, не до конца осилившее xml, но советующее его как панацею. За конфиги в xml - крючьями за мошонку подвешивать надобно. Иди учи xml, может поймёшь, как на нём надо писать и где его надо использовать.

anonymous
()
Ответ на: комментарий от anonymous

>Опять поналезло быдло, не до конца осилившее xml, но советующее его как панацею. За конфиги в xml - крючьями за мошонку подвешивать надобно.

а сам что? а если конфиг древовидной структуры требует?

проследуйте в биореактор

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

Товарищи!

Убедительная просьба! Если Вы заметили ошибку в каком-то ответе исправьте ее, предложив свой вариант. Мне кажется излишнем обсуждение достоинств и недостатков человека, который дал (даже, возможно, неправильный) ответ.

priester
() автор топика
Ответ на: комментарий от irq

> осилить xml не получается?

xml для конфигов?? это чтобы потом было как в гноме, чтобы сконфигурить что-либо писать свой regedit ? :)

Reset ★★★★★
()

Если бы у тебя был интерпритируемый язык, можно было бы конфиг записывать в виде скрипта, этого язакы и запускать как программу

anonymous
()
Ответ на: комментарий от generatorglukoff

>а сам что? а если конфиг древовидной структуры требует?

section_name {
  subsection_name {
    some_param = some_value}}

(section-name 
   (subsection-name
       (some-param some-value)))

ival ★★
()
Ответ на: комментарий от priester

Ты доку по glib'у открывал? Там все разжевано как и чего делать.

1. Создаешь конфиг g_key_file_new
2. Загружаешь g_key_file_load_from_file
3. Загружаешь переменную g_key_file_get_integer

Reset ★★★★★
()
Ответ на: комментарий от Reset

Я для одного проекта использовал xml для построения интерфейса с учётом того, что он будет редактироваться вручную. Проблем никаких не было, ручками всё элементарно редактировалось. Структура была примерно такая:
<frame name="root" width="100" height="100" background="back.png">
<button name="hello" text="Привет" width="70" height="50" />
</frame>
Достаточно просто и логично.

krum
()
Ответ на: комментарий от irq

>> Опять поналезло быдло, не до конца осилившее xml, но советующее его как панацею. За конфиги в xml - крючьями за мошонку подвешивать надобно. Иди учи xml, может поймёшь, как на нём надо писать и где его надо использовать.

За мошонку тебя надо подвешивать или лучше дверью прищемить, чтобы такие быдло больше не рождались. Мнение онанизмуса за авторитетное не считаю, поэтому вали в биореактор.

>> садись, два!

Да, на самом деле ошибочку в спешке допустил. Будет так: 

<?xml version="1.0" encoding="UTF-8"?>
...
<int>
    <name1 value="50" />
    <name2 value="50" />
    <name3 value="50" />
</int>
...

>> >Опять поналезло быдло, не до конца осилившее xml, но советующее его как панацею. За конфиги в xml - крючьями за мошонку подвешивать надобно. 

>> а сам что? а если конфиг древовидной структуры требует? 

>> проследуйте в биореактор

присоединяюсь

irq
()

Нда, "здесь ЛОРа дух, здесь быдл^H^H^H^Hфлеймом пахнет". Еще не разобрались, с какой целью человек xml применяет, а все за старое...
А как дельное что-нибудь посоветовать (или, не дай бог, привести пример ТРУЪ-кода) --- голову в песок...

BigBiker
()
Ответ на: комментарий от Reset

xml тоже редактируется и машиной и человеком. Проблема только в том, что xml не распарсишь традиционной связкой sed/awk/grep.

gaa ★★
()
Ответ на: комментарий от gaa

Всё что угодно можно vim'ом отредактировать, можно хоть бинарники, но смотреть и пытаться понять конфиги того же hal'а это извращение еще то.

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