January 26th, 2011, 05:41 AM
Finding Text File Line Length and Reading into Array in MFC C++
I'm a newbie to C++ and MFC environments, so I'm sorry if this question is really obvious to answer but I've been searching forums and can't find a solution.
Basically, I have a programme that reads a CSV file containing lines of data including a title for each line and a series of (x, y) coordinates. However, each line is of a different length (note the first entry is the name of the data line, the second, fourth etc. are x-coordinates and third, fifth etc. are y-coordinates) e.g.:
I want my code to read in the file, assign the first entry to an array of names of data, and then assign the coordinates to two arrays, one for the x-coordinates and one for the y-coordinates. I've written the code below to open the file and read the data from a text file where I know the length of the line is of 11 items (i.e. "Data 1" line above) but obviously this causes problems when having lines of shorter or longer length. I've assumed the key to this problem (hence the question title!) is being able to find the length of the line of the input file, but I haven't been able to figure it out myself.
Thanks for reading my post, and I hope you're able to offer me some assistance.
// arrays to store data
CArray<CString, CString> arrayDataName;
CArray<double, double> arrayDataX;
CArray<double, double> arrayDataY;
// variables for use in reading CSV file
CString strLine, strValue;
int strPos, prevComma, nextComma, nValues;
if(fileName.Open("C:\\Data.csv", CFile::modeRead)) // open file
prevComma = -1; // enables initial loop to begin at zero
// read CSV file of saved data
for(nValues = 0; nValues < 12; nValues++)
strValue = _T(""); // reset string
// find position of end of line or next comma
if(nValues == 11) nextComma = strLine.GetLength();
else nextComma = strLine.Find(_T(","), prevComma + 1);
for(strPos = prevComma + 1; strPos < nextComma; strPos++) strValue += strLine.GetAt(strPos); // read data
// assign data to correct array
if(nValues == 0) arrayDataName.Add(strValue);
else if(nValues % 2 == TRUE) arrayDataX.Add(atof(strValue));
else if(nValues % 2 == FALSE) arrayDataY.Add(atof(strValue));
prevComma = nextComma; // set current end point as next start point
fileName.Close(); // close file
Tags for this Thread
Click Here to Expand Forum to Full Width
This a Codeguru.com survey!