GithubHelp home page GithubHelp logo

Comments (8)

benhoyt avatar benhoyt commented on July 18, 2024

Hi @chienhsinlin, there's no special provision for this in inih itself, but you can definitely parse comma-separated values in the handler yourself -- use something like strchr or strtok to find the ',' (comma) separators.

If the values for one key are spread across multiple lines, you'll also want to set INI_ALLOW_MULTILINE to 1. This works like Python's configparser multi-line values -- subsequent values have to be indented with whitespace. For example:

[section]
lut_table = 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 11, 12, 13, 14, 15, 16

Then you'll receive two separate calls to your handler function with the same section and key name, and you'll need to save the last lut_table array index in a global or something like that.

Hope that helps!

from inih.

chienhsinlin avatar chienhsinlin commented on July 18, 2024

Thanks a lot, It works now after using strtok in the handler to parse each line and tokenize strings with delimiter.

from inih.

chienhsinlin avatar chienhsinlin commented on July 18, 2024

Something like that. as you said idx is global variable.
idx = 0; // as global variable.

        tok = strtok((char *)value,",");
        pconfig.lut[idx] = atoi(tok);
        while(tok!=NULL) {
            idx++;
            tok =strtok(NULL," ,");
            if(tok!= NULL)
                pconfig.lut[idx] = atoi(tok); 
        }

from inih.

wang-mb avatar wang-mb commented on July 18, 2024

Hi @chienhsinlin, there's no special provision for this in inih itself, but you can definitely parse comma-separated values in the handler yourself -- use something like strchr or strtok to find the ',' (comma) separators.

If the values for one key are spread across multiple lines, you'll also want to set INI_ALLOW_MULTILINE to 1. This works like Python's configparser multi-line values -- subsequent values have to be indented with whitespace. For example:

[section]
lut_table = 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 11, 12, 13, 14, 15, 16

Then you'll receive two separate calls to your handler function with the same section and key name, and you'll need to save the last lut_table array index in a global or something like that.

Hope that helps!
hi, @benhoyt,
for multiple lines like this, seems it's no longer possible to add comments after the value, and the comments either with # or ; are treated as part of value. I feel it's not right. Is this an issue? Thanks.

from inih.

benhoyt avatar benhoyt commented on July 18, 2024

Hi @silly2020, do you have INI_ALLOW_INLINE_COMMENTS turned off? See ini.h for a complete list of settings.

from inih.

wang-mb avatar wang-mb commented on July 18, 2024

Hi, @benhoyt , thanks for prompt reply.
I didn't turned off INI_ALLOW_INLINE_COMMENTS, it is 1 and INI_ALLOW_INLINE_COMMENTS is ";".
Comments start with ";" in subsequent lines are treated as part of value, comments in the line with name is OK.
Thanks again.
P.S.
I tested with dump in example as below:
ini file content:

[test]
MyName  = value part 1 ; comments OK
 value part 2 ; expect ignore this as comments

what I got with dump:

[test]
MyName = value part 1
MyName = value part 2 ; expect ignore this as comments

from inih.

benhoyt avatar benhoyt commented on July 18, 2024

@silly2020 Thanks for the report. This is an oversight (bug!) in inih, and differs from how Python's ConfigParser works. Does the latest master version work for you? If so, I'll release this in r56.

from inih.

wang-mb avatar wang-mb commented on July 18, 2024

@benhoyt Yes. I tested again with master version and it works for me. Thank you so much!

from inih.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.