Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read from an .ini file?

I have created a basic .ini file called configuration.ini. This file looks as follows:

[Application]
no_of_applications= 4;

[states]

title = "Config File States available";
name = 'Active, Deactivated, Hot';

[reaction]
reac_type = ["switch_schedule", "activate_app", "disable_app";

Now I intend to read this .ini file from my C program. I have included the #include <configuration.ini> line in my C program. I just want to read the title from the section 'states' in the C program i.e

#include<stdio.h>
#include<configuration.ini>

int main()
{
    //read the variable 'title' from 'states' and print it
    return 0;
}

Can somebody tell me how can I do that?

like image 690
Anamika Ana Avatar asked Feb 09 '23 14:02

Anamika Ana


2 Answers

Assuming you are using Windows, you can work this way:

First include Windows.h

#include <Windows.h>

On your function, create a LPCSTR (heh!? Really? Yeah.)

LPCSTR ini = "C:\\config.ini";

And call GetPrivateProfileString:

char returnValue[100];
GetPrivateProfileString("states", "title", 0, returnValue, 100, ini);
like image 105
hlscalon Avatar answered Feb 23 '23 11:02

hlscalon


Well, first of all, do not #include the .ini file. It does not think what you think it does. #include <fname> actually adds the content of the file fname to the current file, which is not what you want. Remove the #include.

Secondly, be it .ini or something else, if it is having formatted text, you can always use the below algorithm to read the file.

  1. Define a buffer long enough to hold an entire line.
  2. Open the file using fopen(). Check against errors.
  3. Read a line from the file using fgets(). Check for success.
  4. Compare the read line with your section value, for example, "[states]". You may want to get rid of the trailing newline read by the fgets() first.
    • If it matches, read the next line and continue to step 6.
    • If it does not match, continue to step 3.
  5. Tokenize the input using strtok().
  6. Check the first token against your expected head value, for example, title here. You may use strcmp().
  7. If it matches, tokenize the same input string to get the next token, which is your expected value.
like image 45
Sourav Ghosh Avatar answered Feb 23 '23 10:02

Sourav Ghosh