Download source files - 102 Kb
Introduction
How many times have you wanted to parse a string and had to re-write a little function here or there to extract what you want? This class is exactly what you've been waiting for.
How To Use CQStringParser
Add the following include:
#include "QStringParser.h"
And where it's needed, do something like this (I used this code to test the class):
CString sTest = "abc,def,\"efg,hij\",klm,nop,\"qrstuv\",wxyz";
CQStringParser p(sTest, ',', '\"');
CString sBuffer = "";
int nCount = p.GetCount();
if (nCount > 0)
{
for (int i = 1; i <= nCount; i++)
{
sBuffer += (p.GetField(i) + CString("\n"));
}
AfxMessageBox(sBuffer);
CString sTemp;
int nElement;
sTemp = p.Find("efg", &nElement);
if (nElement > 0)
{
sBuffer.Format("Found string - %s", sTemp);
AfxMessageBox(sBuffer);
}
else
{
AfxMessageBox("No matching string found ('efg').");
}
sTemp = p.FindExact("abc",&nElement);
if (nElement > 0)
{
sBuffer.Format("Found string - %s", sTemp);
AfxMessageBox(sBuffer);
}
else
{
AfxMessageBox("No exactly matching string found ('efg').");
}
}
else
{
AfxMessageBox("No strings parsed.");
}
You can (of course) easily create an array of CQStringParser
objects if needed, and read in an entire delimited file before processing the parsed strings. Alternatively, you can use the same object over and over again with different strings.
The parsed fields begin at element #1 because I store the original string in element 0.
How To Use CQStdStringParser
Add the following include:
#include "QStdStringParser.h"
And where it's needed, do something like this (I used this code to test the class):
std::string sTest = "abc,def,\"efg,hij\",klm,nop,\"qrstuv\",wxyz";
CQStdStringParser p(sTest, ',', '\"');
The strings being passed into the class and retrieved from the class are of type std:string
, but other than that, the class functions identically to its MFC-specific cousin (which works with CString
s).
Updates
06 May 2001 - As I use my classes they mature and grow, and CQStringParser is no exception. In this iteration, I've simplified the code by eliminating the overloaded constructor and parsing functions. I've also added new functionality. You can now Add, Set (change), Insert, and Delete fields from the parsed string. The demo (link at top this article) includes a simple dialog-based application which allows you to play around with the primary functionality of the class. As usual, the class is fully documented. Have a ball.
10 August 2001 - I recently had reason to need the use of this class in a NON-MFC evnironment, and in order to facilitate this requirement, I created a new version of the class that uses STL instead of the MFC collection classes. The demo program now contains both the CQStringParser class, as well as the CQStdStringParser class. The only externally obvious difference is that the strings you pass in and get back are of type std::string instead of CString. The method names and class functionality are otherwise identical to the original class.
15 March 2002 - Fixed a parsing bug in the string parser classes, and changed the sample app to allow you to change the quote and/or delimiter character in the dialog box.