944,030 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 21871
  • C++ RSS
Oct 8th, 2005
0

parsing conf file in c++

Expand Post »
hi, i'm new here and got a really simple problem.
i need to parse a conf file, where # is a comment, like this:
C++ Syntax (Toggle Plain Text)
  1. # Begin conf
  2. VAR1 = VAL1
  3. VAR2 = VAL2
  4. # end
i want to skip all comments and read VAL1 and VAL2 to members of a class that are std::string. This wouldn't be a problem for me in C, but i want to do it in C++ . Unfortunately, i'm not quite familiar with input and parsing C++ style. hope you can help...
Similar Threads
Reputation Points: 10
Solved Threads: 0
Light Poster
invinate is offline Offline
25 posts
since Oct 2005
Oct 8th, 2005
0

Re: parsing conf file in c++

>This wouldn't be a problem for me in C, but i want to do it in C++
You can use a C solution in C++, you know. But that aside, just read each line and don't do anything if the first non-whitespace character is '#':
C++ Syntax (Toggle Plain Text)
  1. #include <fstream>
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. ifstream in ( "somefile" );
  10.  
  11. if ( in.is_open() ) {
  12. string line;
  13.  
  14. while ( getline ( in, line ) ) {
  15. string::size_type i = line.find_first_not_of ( " \t\n\v" );
  16.  
  17. if ( i != string::npos && line[i] == '#' )
  18. continue;
  19.  
  20. // Process non-comment line
  21. }
  22. }
  23. }
This is much like you would do it in C:
C++ Syntax (Toggle Plain Text)
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ( void )
  5. {
  6. FILE *in = fopen ( "somefile", "r" );
  7.  
  8. if ( in != NULL ) {
  9. char line[1024];
  10.  
  11. while ( fgets ( line, sizeof line, in ) != NULL ) {
  12. size_t i = strspn ( line, " \t\n\v" );
  13.  
  14. if ( line[i] == '#' )
  15. continue;
  16.  
  17. /* Process non-comment line */
  18. }
  19. }
  20.  
  21. return 0;
  22. }
Administrator
Reputation Points: 6442
Solved Threads: 1393
Bad Cop
Narue is offline Offline
11,807 posts
since Sep 2004
Oct 8th, 2005
0

Re: parsing conf file in c++

thank you, Narue, for replying.
yes, i think i understand how to use ifstream and how to read in a string now. But some things are still not clear.
In your code, what is string::npos ?
How to proccess the string? I'm not asking for code, just the idea.
In C, if i have a line like this: VAR1 = VAL1, with a pointer pointing to the beginning i would increment it till i find '=', then skip spaces and i would know that i have what i need. But in C++ using std::string how would i extract VAL1?
Reputation Points: 10
Solved Threads: 0
Light Poster
invinate is offline Offline
25 posts
since Oct 2005
Oct 8th, 2005
0

Re: parsing conf file in c++

>In your code, what is string::npos?
In this context it means "not found".

>How to proccess the string?
I have no idea. That really depends on what you're going to do with the values in the file.

>But in C++ using std::string how would i extract VAL1?
Unless you feel like playing with iterators, or working with the find family of member functions for std::string, just use indices like you would an array of char and call it a day. If you're interested in the new ways, check www.dinkumware.com's reference section for further details on the std::string class.
Administrator
Reputation Points: 6442
Solved Threads: 1393
Bad Cop
Narue is offline Offline
11,807 posts
since Sep 2004
Oct 8th, 2005
0

Re: parsing conf file in c++

thanks again for responding and for the link. i'll do it the indeces way then.
Reputation Points: 10
Solved Threads: 0
Light Poster
invinate is offline Offline
25 posts
since Oct 2005
Nov 4th, 2005
0

Re: parsing conf file in c++

And what about parsing XML configuration file? How can I parse XML - sequentially read through XML document and immediately after reading value of some XML tag assign this value into my variable? Which XML parser should I choose? (Actually, after reading some few tutorials I've already had chosen IBM's xml4c2, but is it good decision?) What exactly does it mean "SAX" and what is it good for?

Please help... Thx.



.mq.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
Mareq is offline Offline
15 posts
since Nov 2005
Apr 16th, 2009
0

Re: parsing conf file in c++

SAX parser can be used for xml file parsing. But it again depend on what kind of sorting you want. With SAX parser , file data can't be modified. And SAX parser always goes top to bottom. And it is fast compare to DOM parser. But if you want to modify xml data also, you need to use DOM parser. But it is slow, as this makes a database in heap and takes memory space more.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
satarupa is offline Offline
1 posts
since Apr 2009

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: string summary analysis
Next Thread in C++ Forum Timeline: Handling exceptions





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC