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

📄 dbfopen.c

📁 包含详细例子的c#创建shape文件的开源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	for( i = 0; i < psDBF->nRecordLength; i++ )	    psDBF->pszCurrentRecord[i] = ' ';	psDBF->nCurrentRecord = hEntity;    }/* -------------------------------------------------------------------- *//*      Is this an existing record, but different than the last one     *//*      we accessed?                                                    *//* -------------------------------------------------------------------- */    if( psDBF->nCurrentRecord != hEntity )    {	DBFFlushRecord( psDBF );	nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength;	fseek( psDBF->fp, nRecordOffset, 0 );	fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp );	psDBF->nCurrentRecord = hEntity;    }    pabyRec = (unsigned char *) psDBF->pszCurrentRecord;/* -------------------------------------------------------------------- *//*      Assign all the record fields.                                   *//* -------------------------------------------------------------------- */    if( (int)strlen((char *) pValue) > psDBF->panFieldSize[iField] )        j = psDBF->panFieldSize[iField];    else    {        memset( pabyRec+psDBF->panFieldOffset[iField], ' ',                psDBF->panFieldSize[iField] );        j = strlen((char *) pValue);    }    strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]),            (char *) pValue, j );    psDBF->bCurrentRecordModified = TRUE;    psDBF->bUpdated = TRUE;    return( TRUE );}/************************************************************************//*                      DBFWriteDoubleAttribute()                       *//*                                                                      *//*      Write a double attribute.                                       *//************************************************************************/int SHPAPI_CALLDBFWriteDoubleAttribute( DBFHandle psDBF, int iRecord, int iField,                         double dValue ){    return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) );}/************************************************************************//*                      DBFWriteIntegerAttribute()                      *//*                                                                      *//*      Write a integer attribute.                                      *//************************************************************************/int SHPAPI_CALLDBFWriteIntegerAttribute( DBFHandle psDBF, int iRecord, int iField,                          int nValue ){    double	dValue = nValue;    return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) );}/************************************************************************//*                      DBFWriteDateAttribute()                         *//*                                                                      *//*      Write a date attribute.                                      *//************************************************************************/int SHPAPI_CALLDBFWriteDateAttribute( DBFHandle psDBF, int iRecord, int iField,                          int nValue ){    double	dValue = nValue;    return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) );}/************************************************************************//*                      DBFWriteStringAttribute()                       *//*                                                                      *//*      Write a string attribute.                                       *//************************************************************************/int SHPAPI_CALLDBFWriteStringAttribute( DBFHandle psDBF, int iRecord, int iField,                         const char * pszValue ){    return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) pszValue ) );}/************************************************************************//*                      DBFWriteNULLAttribute()                         *//*                                                                      *//*      Write a string attribute.                                       *//************************************************************************/int SHPAPI_CALLDBFWriteNULLAttribute( DBFHandle psDBF, int iRecord, int iField ){    return( DBFWriteAttribute( psDBF, iRecord, iField, NULL ) );}/************************************************************************//*                      DBFWriteLogicalAttribute()                      *//*                                                                      *//*      Write a logical attribute.                                      *//************************************************************************/int SHPAPI_CALLDBFWriteLogicalAttribute( DBFHandle psDBF, int iRecord, int iField,		       const char lValue){    return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) (&lValue) ) );}/************************************************************************//*                         DBFWriteTuple()                              *//*									*//*	Write an attribute record to the file.				*//************************************************************************/int SHPAPI_CALLDBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ){    int	       	nRecordOffset, i;    unsigned char	*pabyRec;/* -------------------------------------------------------------------- *//*	Is this a valid record?						*//* -------------------------------------------------------------------- */    if( hEntity < 0 || hEntity > psDBF->nRecords )        return( FALSE );    if( psDBF->bNoHeader )        DBFWriteHeader(psDBF);/* -------------------------------------------------------------------- *//*      Is this a brand new record?                                     *//* -------------------------------------------------------------------- */    if( hEntity == psDBF->nRecords )    {	DBFFlushRecord( psDBF );	psDBF->nRecords++;	for( i = 0; i < psDBF->nRecordLength; i++ )	    psDBF->pszCurrentRecord[i] = ' ';	psDBF->nCurrentRecord = hEntity;    }/* -------------------------------------------------------------------- *//*      Is this an existing record, but different than the last one     *//*      we accessed?                                                    *//* -------------------------------------------------------------------- */    if( psDBF->nCurrentRecord != hEntity )    {	DBFFlushRecord( psDBF );	nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength;	fseek( psDBF->fp, nRecordOffset, 0 );	fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp );	psDBF->nCurrentRecord = hEntity;    }    pabyRec = (unsigned char *) psDBF->pszCurrentRecord;    memcpy ( pabyRec, pRawTuple,  psDBF->nRecordLength );    psDBF->bCurrentRecordModified = TRUE;    psDBF->bUpdated = TRUE;    return( TRUE );}/************************************************************************//*                          DBFReadTuple()                              *//*                                                                      *//*      Read one of the attribute fields of a record.                   *//************************************************************************/const char SHPAPI_CALL1(*)DBFReadTuple(DBFHandle psDBF, int hEntity ){    int	       	nRecordOffset;    unsigned char	*pabyRec;    static char	*pReturnTuple = NULL;    static int	nTupleLen = 0;/* -------------------------------------------------------------------- *//*	Have we read the record?					*//* -------------------------------------------------------------------- */    if( hEntity < 0 || hEntity >= psDBF->nRecords )        return( NULL );    if( psDBF->nCurrentRecord != hEntity )    {	DBFFlushRecord( psDBF );	nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength;	fseek( psDBF->fp, nRecordOffset, 0 );	fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp );	psDBF->nCurrentRecord = hEntity;    }    pabyRec = (unsigned char *) psDBF->pszCurrentRecord;    if ( nTupleLen < psDBF->nRecordLength) {      nTupleLen = psDBF->nRecordLength;      pReturnTuple = (char *) SfRealloc(pReturnTuple, psDBF->nRecordLength);    }        memcpy ( pReturnTuple, pabyRec, psDBF->nRecordLength );            return( pReturnTuple );}/************************************************************************//*                          DBFCloneEmpty()                              *//*                                                                      *//*      Read one of the attribute fields of a record.                   *//************************************************************************/DBFHandle SHPAPI_CALL
DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) 
{
   DBFHandle	newDBF;

   newDBF = DBFCreate ( pszFilename );
   if ( newDBF == NULL ) return ( NULL ); 
   
   newDBF->nFields = psDBF->nFields;
   newDBF->nRecordLength = psDBF->nRecordLength;
   newDBF->nHeaderLength = psDBF->nHeaderLength;
    
   newDBF->pszHeader = (char *) malloc ( newDBF->nHeaderLength );
   memcpy ( newDBF->pszHeader, psDBF->pszHeader, newDBF->nHeaderLength );
   
   newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); 
   memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) *
psDBF->nFields );
   newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields );
   memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) *
psDBF->nFields );
   newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields );
   memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) *
psDBF->nFields );
   newDBF->pachFieldType = (char *) malloc ( sizeof(int) * psDBF->nFields );
   memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(int) *
psDBF->nFields );

   newDBF->bNoHeader = TRUE;
   newDBF->bUpdated = TRUE;
   
   DBFWriteHeader ( newDBF );
   DBFClose ( newDBF );
   
   newDBF = DBFOpen ( pszFilename, "rb+" );

   return ( newDBF );
}
//DBFHandle SHPAPI_CALL//DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) //{//    DBFHandle	newDBF;////   newDBF = DBFCreate ( pszFilename );//   if ( newDBF == NULL ) return ( NULL ); //   //   newDBF->pszHeader = (char *) malloc ( 32 * psDBF->nFields );//   memcpy ( newDBF->pszHeader, psDBF->pszHeader, 32 * psDBF->nFields );//   //   newDBF->nFields = psDBF->nFields;//   newDBF->nRecordLength = psDBF->nRecordLength;//   newDBF->nHeaderLength = 33 + 32 * (psDBF->nFields);//    //   newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); //   memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) * psDBF->nFields );//   newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields );//   memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) * psDBF->nFields );//   newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields );//   memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields );//   newDBF->pachFieldType = (char *) malloc ( sizeof(int) * psDBF->nFields );//   memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(int) * psDBF->nFields );////   newDBF->bNoHeader = TRUE;//   newDBF->bUpdated = TRUE;//   //   DBFWriteHeader ( newDBF );//   DBFClose ( newDBF );//   //   newDBF = DBFOpen ( pszFilename, "rb+" );////   return ( newDBF );//}/************************************************************************//*                       DBFGetNativeFieldType()                        *//*                                                                      *//*      Return the DBase field type for the specified field.            *//*                                                                      *//*      Value can be one of: 'C' (String), 'D' (Date), 'F' (Float),     *//*                           'N' (Numeric, with or without decimal),    *//*                           'D' (Date),                                *//*                           'L' (Logical),                             *//*                           'M' (Memo: 10 digits .DBT block ptr)       *//************************************************************************/char SHPAPI_CALLDBFGetNativeFieldType( DBFHandle psDBF, int iField ){    if( iField >=0 && iField < psDBF->nFields )        return psDBF->pachFieldType[iField];    return  ' ';}/************************************************************************//*                            str_to_upper()                            *//************************************************************************/static void str_to_upper (char *string){    int len;    short i = -1;    len = strlen (string);    while (++i < len)        if (isalpha(string[i]) && islower(string[i]))            string[i] = toupper ((int)string[i]);}/************************************************************************//*                          DBFGetFieldIndex()                          *//*                                                                      *//*      Get the index number for a field in a .dbf file.                *//*                                                                      *//*      Contributed by Jim Matthews.                                    *//************************************************************************/int SHPAPI_CALLDBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName){    char          name[12], name1[12], name2[12];    int           i;    strncpy(name1, pszFieldName,11);    name1[11] = '\0';    str_to_upper(name1);    for( i = 0; i < DBFGetFieldCount(psDBF); i++ )    {        DBFGetFieldInfo( psDBF, i, name, NULL, NULL );        strncpy(name2,name,11);        str_to_upper(name2);        if(!strncmp(name1,name2,10))            return(i);    }    return(-1);}

⌨️ 快捷键说明

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