Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

The age old issue of string parsing comes up again ...

I have a text file that contains lines that are SUPPOSED to follow a set format, specifically:

string, string, long string int string double int

 

The delimiters are therefore:

Comma (,) for the first two fields

Spaces for all other fields

 

Strings like this would be valid:

Jon, Jack, 100 CPN 5 KTE 1.00 10

Jon, Jack 100 CPN 5 KTE 1.00 10 // notice the extra spaces

 

Whereas something like these would be considered invalid:

Jon Jack 100 CPN 5 KTE 1.00 10 // missing the commas

Jon, Jack, 100 CPN 5 KTE 1.00 // missing the last field "10"

Jon, Jack, 100CPN 5 KTE 1.00 10 // missing space between "100" and "CPN"

 

The goal is to EXTRACT each section and store them, and if possible determine when a string is INVALID (does not follow format).

I have a class with the following data members:


class A
{
private:
// Record
string A
string B
long C;
string D;
string E;
string F;
double G;
int H;

public:
A(string sLine); // constructor
};

A::A(string sLine)
{
// somehow parse the string here and determine if it is valid //
}
[/Code]

 

 

So, how can I parse the string (sLine) and extract each piece into there components (A, B, C, D, E, F, G, H)...

I was thinking of using the old method of simply doing substring searches but I find it very error prone and long ... is there a better way to accomplish this?

 

Anything anyone would recommend?

Any help would be much appreciated...

Thanks,

  • Leaders
Posted

In this sort of case I tend to scan the string char by char seeking for delimiters, extracting substrings. In the event of anything unexpected (extra delimiters, invalid number format, early string termination), I would consider the input invalid.

 

Regular expressions might also be an option.

[sIGPIC]e[/sIGPIC]
Posted
marble_eater: RegEx would rock ... but I can't use BOOST or any 3rd party applications - it must be something included with VS 2008 ... Does VS 2008 have a built in REGEX?
  • Leaders
Posted

Just because you are using VS 2008 deosn't mean that the app is DotNet. If you are writing a "C++/CLI" app, then it will be DotNet. If you aren't sure, a simple way to check is see if you can access anything in the System namespace. I don't have much experience with C++/CLI, but from what I gather, libraries are included via a using statement, rather than an include.

#include <iostream>
#using <mscorlib.dll>
#using <System.Text.dll>

// ...

System::Text::RegularExpressions::Regex ^x = 
   gcnew System::Text::RegularExpressions::Regex("pattern"):

The above should compile only if your app is managed (I haven't tested it either way).

[sIGPIC]e[/sIGPIC]
Posted

Humm - guess it isn't a DotNet application then ...

When I tested your code I get the following error:

Error 1 fatal error C1190: managed targeted code requires a '/clr' option

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...