⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timetest.cpp

📁 开源的电子海图程序
💻 CPP
字号:
/* **************************************************************************** * $Id: timetest.cpp,v 1.1.1.1 2004/12/29 07:54:57 jay-be-em Exp $ * * Project:  SDTS Translator * Purpose:  Example program dumping data in 8211 data to stdout. * Author:   Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: timetest.cpp,v $ * Revision 1.1.1.1  2004/12/29 07:54:57  jay-be-em * Initial import * * Revision 1.2  1999/11/18 19:03:04  warmerda * expanded tabs * * Revision 1.1  1999/05/06 14:26:33  warmerda * New * * Revision 1.2  1999/04/28 05:16:47  warmerda * added usage * * Revision 1.1  1999/04/27 22:09:30  warmerda * New * */#include <stdio.h>#include "iso8211.h"static void ViewRecordField( DDFField * poField );static int ViewSubfield( DDFSubfieldDefn *poSFDefn,                         const char * pachFieldData,                         int nBytesRemaining );/* **********************************************************************//*                                main()                                *//* **********************************************************************/int main( int nArgc, char ** papszArgv ){    DDFModule   oModule;    const char  *pszFilename;    int         i;    if( nArgc > 1 )        pszFilename = papszArgv[1];    else    {        printf( "Usage: 8211view filename\n" );        exit( 1 );    }    for( i = 0; i < 40; i++ )    {/* -------------------------------------------------------------------- *//*      Open the file.  Note that by default errors are reported to     *//*      stderr, so we don't bother doing it ourselves.                  *//* -------------------------------------------------------------------- */        if( !oModule.Open( pszFilename ) )        {            exit( 1 );        }/* -------------------------------------------------------------------- *//*      Loop reading records till there are none left.                  *//* -------------------------------------------------------------------- */        DDFRecord       *poRecord;        int             nRecordCount = 0;        int             nFieldCount = 0;                        while( (poRecord = oModule.ReadRecord()) != NULL )        {            /* ------------------------------------------------------------ */            /*      Loop over each field in this particular record.         */            /* ------------------------------------------------------------ */            for( int iField = 0; iField < poRecord->GetFieldCount(); iField++ )            {                DDFField        *poField = poRecord->GetField( iField );                ViewRecordField( poField );                nFieldCount++;            }            nRecordCount++;        }        oModule.Close();        printf( "Read %d records, %d fields.\n", nRecordCount, nFieldCount );    }}/* **********************************************************************//*                          ViewRecordField()                           *//*                                                                      *//*      Dump the contents of a field instance in a record.              *//* **********************************************************************/static void ViewRecordField( DDFField * poField ){    int         nBytesRemaining;    const char  *pachFieldData;    DDFFieldDefn *poFieldDefn = poField->GetFieldDefn();        // Get pointer to this fields raw data.  We will move through    // it consuming data as we report subfield values.                pachFieldData = poField->GetData();    nBytesRemaining = poField->GetDataSize();                    /* -------------------------------------------------------- */    /*      Loop over the repeat count for this fields          */    /*      subfields.  The repeat count will almost            */    /*      always be one.                                      */    /* -------------------------------------------------------- */    int         iRepeat, nRepeatCount;    nRepeatCount = poField->GetRepeatCount();                for( iRepeat = 0; iRepeat < nRepeatCount; iRepeat++ )    {        /* -------------------------------------------------------- */        /*   Loop over all the subfields of this field, advancing   */        /*   the data pointer as we consume data.                   */        /* -------------------------------------------------------- */        int     iSF;                for( iSF = 0; iSF < poFieldDefn->GetSubfieldCount(); iSF++ )        {            DDFSubfieldDefn *poSFDefn = poFieldDefn->GetSubfield( iSF );            int         nBytesConsumed;            nBytesConsumed = ViewSubfield( poSFDefn, pachFieldData,                                           nBytesRemaining );            nBytesRemaining -= nBytesConsumed;            pachFieldData += nBytesConsumed;        }    }}/* **********************************************************************//*                            ViewSubfield()                            *//* **********************************************************************/static int ViewSubfield( DDFSubfieldDefn *poSFDefn,                         const char * pachFieldData,                         int nBytesRemaining ){    int         nBytesConsumed = 0;        switch( poSFDefn->GetType() )    {      case DDFInt:        poSFDefn->ExtractIntData( pachFieldData, nBytesRemaining,                                  &nBytesConsumed );        break;      case DDFFloat:        poSFDefn->ExtractFloatData( pachFieldData, nBytesRemaining,                                    &nBytesConsumed );        break;      case DDFString:        poSFDefn->ExtractStringData( pachFieldData, nBytesRemaining,                                     &nBytesConsumed );        break;      default:        break;    }    return nBytesConsumed;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -