How to read a file and parse it in C++?

Status
Not open for further replies.

Bella

Newbie level 6
Joined
Dec 22, 2003
Messages
11
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
90
how to parse *.list file in c++

start
name
units
2
begin
a: 12,0.7,12,12.5
b: bb, 23, 24, 10
c: cc, 23.5, 24.5, 12
d: dd, 22.5, 22.5, 13
e: 10,12,12
end
name1: abc,12, 12
name2: 12.5,12.5, 14
name3: 12.5,12.5,ab1,ab2,ab3
stop

The above is the text file sample.txt. I have to read the file and parse the above text file. How to parse each separately using C++?. Between begin and end, I have to parse each after ":" . Is there any simple logic to parse them?.
 

parse file to a particular position, c++

This is how you could do it:
But it's C for handling the file IO
Perhaps you can do it with filestreams too.

Code:
#include <stdio.h>

// global variable or membervariable of a class
containertypeYouWant container;

void parseFile(char * inifileName)
{
  char line[1024];  // Buffer for a line
  FILE * inifile;

  inifile = fopen(inifileName, "rt");

  while(fgets(line, sizeof(line) - 1 , inifile) != NULL)
    {
       // do we have to parse (are we seen begin and not seen end?)

       //search line for :
  
       //store stuff before : as identifiername in container
       
       //parse line after : to store values
    }

You'll have to work the lineparsing out yourself.
An easy way is converting the line to an std::string
Code:
std::string parseString = std::string(line);

Now you can use the search method of string
and store the information in the container

Code:
unsigned int position;
position = parseString.find(":");
if (position < parseString.size())
{
  // store method of container has 2 arguments
  // first is the identifier, second is the data
  // store method could parse the data when it has multiple values
   container.store(parseString.substr(0,position), 
                          parseString.substr(position+2));
  //                                                  ^
  //                                                  forget ':' and ' '
}

more information about std::string can be found here:
https://www.sgi.com/tech/stl/basic_string.html

btw, when you need to parse allot of files with a more extended syntax then Name = Value you could think of using Flex and Bison (updated Lex and YACC)
https://www.mactech.com/articles/mactech/Vol.16/16.07/UsingFlexandBison/


Antharax
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…