Getting data from structured file

[b][red]This message was edited by akar at 2005-2-27 21:36:56[/red][/b][hr]
Hi, i have a database file using the structures that are at the bottom of the post and i want to read data from it (i need the hiTemp, minTemp, ..., that are in the DailySummary structure). How can i get these datas??. I tried this but couldnt get any good data (the startPos dont seem to be good). So, i would like to know how to get the startPos and how to use it to get the dailySummary of each day. :

[code]
ifstream dataFile("2005-01.wlk",ios::binary);

HeaderBlock headerBlock;
DailySummary1 dailySum1;

dataFile.seekg (0);
dataFile.read ((char*) (&headerBlock), sizeof (HeaderBlock));

cout<< headerBlock.idCode <<endl;
cout<< headerBlock.totalRecords <<endl;
for(int i=1;i<32;i++)
{
cout<< "------------------------------" <<endl;
cout<< "startPos " << i << " : " <<headerBlock.dayIndex[i].startPos <<endl;
cout<< "records :" <<headerBlock.dayIndex[i].recordsInDay <<endl<<endl;
dataFile.seekg (headerBlock.dayIndex[i].startPos);
dataFile.read ((char*) (&dailySum1), sizeof (DailySummary1));

cout<< dailySum1.hiOutTemp <<endl;
cout<< dailySum1.lowOutTemp <<endl;
cout<< dailySum1.avgOutTemp <<endl;
cout<< dailySum1.hiSpeed <<endl;
}[/code]

The structures of the datas in the file are the following :

[code]
// Data is stored in monthly files. Each file has the following header.
struct DayIndex
{
short recordsInDay; // includes any daily summary records
long startPos; // The index (starting at 0) of the first daily summary record
};

// Header for each monthly file.
class HeaderBlock
{
char idCode [16]; // = {'W', 'D', 'A', 'T', '5', '.', '0', 0, 0, 0, 0, 0, 0, 0, 5, 0}
long totalRecords;
DayIndex dayIndex [32]; // index records for each day. Index 0 is not used
// (i.e. the 1'st is at index 1, not index 0)
};

// After the Header are a series of 88 byte data records with one of the following
// formats. Note that each day will begin with 2 daily summary records

// Daily Summary Record 1
struct DailySummary1
{
BYTE dataType = 2;
BYTE reserved; // this will cause the rest of the fields to start on an even address

short dataSpan; // total # of minutes accounted for by physical records for this day
short hiOutTemp, lowOutTemp; // tenths of a degree F
short hiInTemp, lowInTemp; // tenths of a degree F
short avgOutTemp, avgInTemp; // tenths of a degree F (integrated over the day)
short hiChill, lowChill; // tenths of a degree F
short hiDew, lowDew; // tenths of a degree F
short avgChill, avgDew; // tenths of a degree F
short hiOutHum, lowOutHum; // tenths of a percent
short hiInHum, lowInHum; // tenths of a percent
short avgOutHum; // tenths of a percent
short hiBar, lowBar; // thousandths of an inch Hg
short avgBar; // thousandths of an inch Hg
short hiSpeed, avgSpeed; // tenths of an MPH
short dailyWindRunTotal; // 1/10'th of an mile
short hi10MinSpeed; // the highest average wind speed record
BYTE dirHiSpeed, hi10MinDir; // direction code (0-15, 255)
short dailyRainTotal; // 1/1000'th of an inch
short hiRainRate; // 1/100'th inch/hr ???
short dailyUVDose; // 1/10'th of a standard MED
BYTE hiUV; // tenth of a UV Index
BYTE timeValues[27]; // space for 18 time values (see below)
};

// Daily Summary Record 1
struct DailySummary2
{
BYTE dataType = 3;
BYTE reserved; // this will cause the rest of the fields to start on an even address

// this field is not used now.
unsigned short todaysWeather; // bitmapped weather conditions (Fog, T-Storm, hurricane, etc)

short numWindPackets; // # of valid packets containing wind data,
// this is used to indicate reception quality
short hiSolar; // Watts per meter squared
short dailySolarEnergy; // 1/10'th Ly
short minSunlight; // number of accumulated minutes where the avg solar rad > 150
short dailyETTotal; // 1/1000'th of an inch
short hiHeat, lowHeat; // tenths of a degree F
short avgHeat; // tenths of a degree F
short hiTHSW, lowTHSW; // tenths of a degree F
short hiTHW, lowTHW; // tenths of a degree F

short integratedHeatDD65; // integrated Heating Degree Days (65F threshold)
// tenths of a degree F - Day

// Wet bulb values are not calculated
short hiWetBulb, lowWetBulb; // tenths of a degree F
short avgWetBulb; // tenths of a degree F

BYTE dirBins[24]; // space for 16 direction bins
// (Used to calculate monthly dominant Dir)

BYTE timeValues[15]; // space for 10 time values (see below)

short integratedCoolDD65; // integrated Cooling Degree Days (65F threshold)
// tenths of a degree F - Day
BYTE reserved2[11];
};

// standard archive record
struct WeatherDataRecord
{
BYTE dataType = 1;
BYTE archiveInterval; // number of minutes in the archive
// see below for more details about these next two fields)
BYTE iconFlags; // Icon associated with this record, plus Edit flags
BYTE moreFlags; // Tx Id, etc.

short packedTime; // minutes past midnight of the end of the archive period
short outsideTemp; // tenths of a degree F
short hiOutsideTemp; // tenths of a degree F
short lowOutsideTemp; // tenths of a degree F
short insideTemp; // tenths of a degree F
short barometer; // thousandths of an inch Hg
short outsideHum; // tenths of a percent
short insideHum; // tenths of a percent
unsigned short rain; // number of clicks + rain collector type code
short hiRainRate; // clicks per hour
short windSpeed; // tenths of an MPH
short hiWindSpeed; // tenths of an MPH
BYTE windDirection; // direction code (0-15, 255)
BYTE hiWindDirection; // direction code (0-15, 255)
short numWindSamples; // number of valid ISS packets containing wind data
// this is a good indication of reception
short solarRad, hisolarRad;// Watts per meter squared
BYTE UV, hiUV; // tenth of a UV Index

BYTE leafTemp[4]; // (whole degrees F) + 90

short extraRad; // used to calculate extra heating effects of the sun in THSW index

short newSensors[6]; // reserved for future use
BYTE forecast; // forecast code during the archive interval

BYTE ET; // in thousanths of an inch

BYTE soilTemp[6]; // (whole degrees F) + 90
BYTE soilMoisture[6]; // centibars of dryness
BYTE leafWetness[4]; // Leaf Wetness code (0-15, 255)
BYTE extraTemp[7]; // (whole degrees F) + 90
BYTE extraHum[7]; // whole percent
};
[/code]










Comments

  • Use code tags to format your posts so others can read them easier. Use [ code ] and [/ code ] (without the spaces)
    [code]

    ifstream dataFile("2005-01.wlk",ios::in);
    HeaderBlock headerBlock;
    DailySummary1 summary1;

    dataFile>> headerBlock.idCode;
    cout<< headerBlock.idCode<<endl;

    dataFile>> headerBlock.totalRecords;
    cout<< headerBlock.totalRecords<<endl;
    [/code]
    [italic][blue]To understand recursive, first you need to understand recursive[/blue][/italic]

  • [code]ifstream dataFile("2005-01.wlk",ios::binary);[/code]

    [blue]If you want to open the file in binary mode, I think you may need to [b]OR[/b] the [italic]ios::binary[/italic] with [italic]ios::in[/italic] to have the file opened properly.[/blue]

    [code]ifstream dataFile("2005-01.wlk",ios::binary[red]|ios::in[/red]);[/code]

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories