Listing 4: Implements file processing
#include <stdlib.h>
#include <string.h>
#include "Globals.h"
#include "File.h"
File::File()
: m_file(0)
{
}
File::~File()
{
if (m_file) {
m_file->close();
delete m_file;
}
}
void File::Init(char* FileName)
{
m_file = new ifstream;
m_file->open(FileName, ios::in);
// int num = m.size();
}
BOOL File::GetRecord(sVariantRecord& record)
{
char prefix, lpszTokenLine[81];
short recordFormat;
float number;
char* here, *p;
short datatype;
CKey key;
// priming read
m_file->getline(lpszTokenLine, 81);
if (m_file->eof()) {
return FALSE;
}
prefix = lpszTokenLine[0];
p = &1pszTokenLine[1];
while (prefix != '^') {
switch (prefix) {
case 'N':
strcpy(record.Name, p);
break;
case 'F':
recordFormat = atoi(p);
record.Format = recordFormat;
break;
default:
key.m_format = recordFormat;
key.m_prefix = prefix;
j = m.find(key);
if (j != m.end()) {
datatype =
(*j).second.m_datatype;
switch (datatype) {
case FLOAT:
here = (char*)&record + (*j).second.m_offset;
number = atof(p);
memcpy(here, &number, sizeof(float));
break;
case STRING:
here = (char*)&record + (*j).second.m_offset;
strcpy(here, p);
break;
default:
// some error
break;
} // switch
}
break;
} // switch
m_file->getline(lpszTokenLine, 81);
prefix = lpszTokenLine[0];
p = &lpszTokenLine[1];
}
return TRUE;
}
//omitted: brute force variant population method. Full source code
//is available on code disk and via ftp, see page 3 for details --mb
//End of File