#include <stdio.h>
#include "iso8211.h"
#include <algorithm>
CPL_CVSID("$Id: 8211view.cpp 8ca42e1b9c2e54b75d35e49885df9789a2643aa4 2020-05-17 21:43:40 +0200 Even Rouault $")
static
void ViewRecordField(
DDFField * poField );
const char * pachFieldData,
int nBytesRemaining );
int main( int nArgc, char ** papszArgv )
{
const char *pszFilename = nullptr;
int bFSPTHack = FALSE;
for( int iArg = 1; iArg < nArgc; iArg++ )
{
if( EQUAL(papszArgv[iArg],"-fspt_repeating") )
bFSPTHack = TRUE;
else
pszFilename = papszArgv[iArg];
}
if( pszFilename == nullptr )
{
printf( "Usage: 8211view filename\n" );
exit( 1 );
}
if( !oModule.
Open( pszFilename ) )
{
exit( 1 );
}
if( bFSPTHack )
{
if( poFSPT == nullptr )
fprintf( stderr,
"unable to find FSPT field to set repeating flag.\n" );
else
}
int iRecord = 0;
while( (poRecord = oModule.
ReadRecord()) !=
nullptr )
{
printf( "Record %d (%d bytes)\n",
for(
int iField = 0; iField < poRecord->
GetFieldCount(); iField++ )
{
ViewRecordField( poField );
}
}
}
static void ViewRecordField(
DDFField * poField )
{
printf( " Field %s: %s\n",
const char *pachFieldData = poField->
GetData();
for(
int iRepeat = 0; iRepeat < poField->
GetRepeatCount(); iRepeat++ )
{
{
int nBytesConsumed =
ViewSubfield( poSFDefn, pachFieldData, nBytesRemaining );
nBytesRemaining -= nBytesConsumed;
pachFieldData += nBytesConsumed;
}
}
}
const char * pachFieldData,
int nBytesRemaining )
{
int nBytesConsumed = 0;
{
case DDFInt:
if( poSFDefn->GetBinaryFormat() == DDFSubfieldDefn::UInt )
printf( " %s = %u\n",
static_cast<unsigned int>(
&nBytesConsumed )) );
else
printf( " %s = %d\n",
&nBytesConsumed ) );
break;
case DDFFloat:
printf( " %s = %f\n",
&nBytesConsumed ) );
break;
case DDFString:
printf( " %s = `%s'\n",
&nBytesConsumed ) );
break;
case DDFBinaryString:
{
GByte *pabyBString = (GByte *)
&nBytesConsumed );
printf(
" %s = 0x", poSFDefn->
GetName() );
for( int i = 0; i < std::min(nBytesConsumed, 24); i++ )
printf( "%02X", pabyBString[i] );
if( nBytesConsumed > 24 )
printf( "%s", "..." );
if ( EQUAL(poSFDefn->
GetName(),
"NAME") )
{
const int vrid_rcnm=pabyBString[0];
const int vrid_rcid=pabyBString[1] + (pabyBString[2]*256)+
(pabyBString[3]*65536)+ (pabyBString[4]*16777216);
printf("\tVRID RCNM = %d,RCID = %d",vrid_rcnm,vrid_rcid);
}
else if ( EQUAL(poSFDefn->
GetName(),
"LNAM") )
{
const int foid_agen=pabyBString[0] + (pabyBString[1]*256);
const int foid_find=pabyBString[2] + (pabyBString[3]*256)+
(pabyBString[4]*65536)+ (pabyBString[5]*16777216);
const int foid_fids=pabyBString[6] + (pabyBString[7]*256);
printf("\tFOID AGEN = %d,FIDN = %d,FIDS = %d",
foid_agen,foid_find,foid_fids);
}
printf( "\n" );
}
break;
}
return nBytesConsumed;
}
Definition: iso8211.h:183
const char * GetDescription() const
Definition: iso8211.h:211
int GetSubfieldCount() const
Definition: iso8211.h:214
void SetRepeatingFlag(int n)
Definition: iso8211.h:238
const char * GetName() const
Definition: iso8211.h:206
DDFSubfieldDefn * GetSubfield(int i)
Definition: ddffielddefn.cpp:909
Definition: iso8211.h:512
const char * GetData() const
Definition: iso8211.h:530
int GetDataSize() const
Definition: iso8211.h:533
DDFFieldDefn * GetFieldDefn()
Definition: iso8211.h:538
int GetRepeatCount()
Definition: ddffield.cpp:216
DDFRecord * ReadRecord()
Definition: ddfmodule.cpp:605
DDFFieldDefn * FindFieldDefn(const char *)
Definition: ddfmodule.cpp:556
int Open(const char *pszFilename, int bFailQuietly=FALSE)
Definition: ddfmodule.cpp:168
Definition: iso8211.h:394
int GetFieldCount() const
Definition: iso8211.h:405
DDFField * GetField(int)
Definition: ddfrecord.cpp:725
int GetDataSize() const
Definition: iso8211.h:428
Definition: iso8211.h:289
DDFDataType GetType() const
Definition: iso8211.h:312
int ExtractIntData(const char *pachData, int nMaxBytes, int *pnConsumedBytes)
Definition: ddfsubfielddefn.cpp:605
double ExtractFloatData(const char *pachData, int nMaxBytes, int *pnConsumedBytes)
Definition: ddfsubfielddefn.cpp:463
const char * GetName() const
Definition: iso8211.h:298
const char * ExtractStringData(const char *pachData, int nMaxBytes, int *pnConsumedBytes)
Definition: ddfsubfielddefn.cpp:407