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

📄 dbfopen.c

📁 一个关于shapefile的类库,包括dll,lib文件和头文件,大家也可到开源GIS上面下载
💻 C
📖 第 1 页 / 共 4 页
字号:
	strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]),		(char *) pValue, j );	break;    }    return( nRetResult );}/************************************************************************//*                     DBFWriteAttributeDirectly()                      *//*                                                                      *//*      Write an attribute record to the file, but without any          *//*      reformatting based on type.  The provided buffer is written     *//*      as is to the field position in the record.                      *//************************************************************************/int DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField,                              void * pValue ){    int	       	nRecordOffset, i, j;    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;/* -------------------------------------------------------------------- *//*      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 ) );}/************************************************************************//*                      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_CALLDBFCloneEmpty(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 = 32 * (psDBF->nFields+1);       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),    *//*                           '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 + -