Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
how to read .conf file keyvalue pair without groupname in c?
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Portage & Programming
View previous topic :: View next topic  
Author Message
guyuming
Apprentice
Apprentice


Joined: 19 Nov 2020
Posts: 242

PostPosted: Mon Sep 02, 2024 8:04 am    Post subject: how to read .conf file keyvalue pair without groupname in c? Reply with quote

i am writing application with gtk in c language.

I need to parse key value pair text files

according to https://docs.gtk.org/glib/method.KeyFile.get_keys.html , i have to provide a group name(or so-called section name).

but i want to deal with simple configuration files which may not have group name.

if you run locate *.conf , you can find many .conf files without group name, although many do contains group name.

so, what's the best practice to handle key value pair text file in c which may or may not have group name?
Back to top
View user's profile Send private message
lars_the_bear
Guru
Guru


Joined: 05 Jun 2024
Posts: 385

PostPosted: Mon Sep 02, 2024 8:34 am    Post subject: Reply with quote

Load the entire configuration file into memory, adding an extra six bytes for a dummy " [foo]\n " at the beginning. Then use KeyFile::load_from_data() to load this entire block of memory into a KeyFile, starting from the initial "[foo]". Then use as documented, with "foo" as your group name.

Or just copy the entire file to a temporary location, adding the [foo] header as you copy. Then use load_from_file() as normal, again with 'foo' as the group name.

So far as I know, GLib 'ini files' have to have a group header, even if it's just a dummy one. Of course, you aren't constrained to use 'foo' :)

Do be aware that the GLib KeyFile functions are designed to handle data in a particular format. That is, there are particular ways to include commments, escape non-printing characters, etc. You can't necessarily assume that these functions will handle an arbitrary configuration file generated by non-GLib software (although usually they work fine).

I wrote my own functions for handling key-value files. It's not hugely difficult, and now I can use it wherever I want.

BR, Lars.

PS. There must surely be open-source libraries around for handling this kind of file? They're pretty common, after all.
Back to top
View user's profile Send private message
Hu
Administrator
Administrator


Joined: 06 Mar 2007
Posts: 22404

PostPosted: Mon Sep 02, 2024 1:36 pm    Post subject: Reply with quote

By itself, .conf is only a hint that some program considers this some type of configuration file. You cannot generally assume anything beyond that. The program may or may not have section headers like INI files do. It may or may not require quoting of values. It may or may not support comments. Comments are traditionally introduced by #, but some unusual programs may use some other character for comments. Comments may or may not require that the first non-whitespace character on the line be the comment character. Comments may or may not require that the comment character be the very first character on the line, disallowing an leading whitespace.

In my opinion, you need to narrow the problem space. What type of files are you prepared to support? What files will you consider ill-formed, and refuse to load?
Back to top
View user's profile Send private message
lars_the_bear
Guru
Guru


Joined: 05 Jun 2024
Posts: 385

PostPosted: Mon Sep 02, 2024 1:49 pm    Post subject: Reply with quote

@Hu

The OP says

Quote:
I need to parse key value pair text files


The GLib KeyFile class handles a specific kind of key/value pair text file, so I presume the OP has that kind of thing in mind, since he mentions KeyFile. I presume that the advice to `locate *.conf` was just to find examples.

But, to be fair, I'm just guessing.

In fact, the KeyFile class is pretty particular about the format it handles. Still, I've found that, if you're developing for GLib anyway, it's often easier to massage a different kind of key/value file into a format that KeyFile understands, than to write a parser from scratch.

BR, Lars.
Back to top
View user's profile Send private message
Genone
Retired Dev
Retired Dev


Joined: 14 Mar 2003
Posts: 9592
Location: beyond the rim

PostPosted: Mon Sep 02, 2024 4:04 pm    Post subject: Reply with quote

The main issue is that there is no real standard for ini-style files (unlike xml or json). The closest thing to a standard is probably the way Microsoft has implemented it within regedit for importing/exporting registry keys and values, and that specific implementation does require sections for semantic reasons. So most implementations will at least support sections, though not necessarily enforce it.

Not sure why glib enforces sections as it is pretty trivial to handle both cases.

The easiest option to work around is to just add a section to your config file and be done with it, unless this would cause other issues. Or if you really just need basic key=value assignments with no fancy stuff (arrays, multi-line values, variables, ...) you can also write your own parser, it isn't exactly rocket science. I wouldn't recommend this normally, but with ini-style files in particular the implementation details can be really annoying to deal with when they clash with your understanding.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Portage & Programming All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum