亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mitab_tabview.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    char *pszTableName = TABGetBasename(m_pszFname);
    if ( m_poRelation->Init(pszTableName,
                            m_papoTABFiles[0], m_papoTABFiles[1],
                            m_papszWhereClause[4], m_papszWhereClause[2],
                            m_papszFieldNames)  != 0 )
    {
        // An error should already have been reported
        CPLFree(pszTableName);
        Close();
        return -1;
    }
    CPLFree(pszTableName);

    return 0;
}


/**********************************************************************
 *                   TABView::OpenForWrite()
 *
 * Create a new TABView dataset
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABView::OpenForWrite(const char *pszFname)
{
    int nFnameLen = 0;
   
    m_eAccessMode = TABWrite;

    /*-----------------------------------------------------------------
     * Read main .TAB (text) file
     *----------------------------------------------------------------*/
    m_pszFname = CPLStrdup(pszFname);

#ifndef _WIN32
    /*-----------------------------------------------------------------
     * On Unix, make sure extension uses the right cases
     * We do it even for write access because if a file with the same
     * extension already exists we want to overwrite it.
     *----------------------------------------------------------------*/
    TABAdjustFilenameExtension(m_pszFname);
#endif

    /*-----------------------------------------------------------------
     * Extract the path component from the main .TAB filename
     *----------------------------------------------------------------*/
    char *pszPath = CPLStrdup(m_pszFname);
    nFnameLen = strlen(pszPath);
    for( ; nFnameLen > 0; nFnameLen--)
    {
        if (pszPath[nFnameLen-1] == '/' || 
            pszPath[nFnameLen-1] == '\\' )
        {
            break;
        }
        pszPath[nFnameLen-1] = '\0';
    }

    char *pszBasename = TABGetBasename(m_pszFname);

    /*-----------------------------------------------------------------
     * Create the 2 TAB files for the view.
     *
     * __TODO__ For now, we support only 2 files linked through a single
     *          field... not sure if anything else than that can be useful
     *          anyways.
     *----------------------------------------------------------------*/
    m_numTABFiles = 2;
    m_papszTABFnames = NULL;
    m_nMainTableIndex = 0;
    m_bRelFieldsCreated = FALSE;

    m_papoTABFiles = (TABFile**)CPLCalloc(m_numTABFiles, sizeof(TABFile*));

    for (int iFile=0; iFile < m_numTABFiles; iFile++)
    {
        m_papszTABFnames = CSLAppendPrintf(m_papszTABFnames, "%s%s%d.tab", 
                                               pszPath, pszBasename, iFile+1);
#ifndef _WIN32
        TABAdjustFilenameExtension(m_papszTABFnames[iFile]);
#endif
        
        m_papoTABFiles[iFile] = new TABFile;
   
        if ( m_papoTABFiles[iFile]->Open(m_papszTABFnames[iFile], "wb") != 0)
        {
            // Open Failed... an error has already been reported, just return.
            CPLFree(pszPath);
            CPLFree(pszBasename);
            Close();
            return -1;
        }
    }

    /*-----------------------------------------------------------------
     * Create TABRelation... 
     *----------------------------------------------------------------*/
    m_poRelation = new TABRelation;
    
    if ( m_poRelation->Init(pszBasename,
                            m_papoTABFiles[0], m_papoTABFiles[1],
                            NULL, NULL, NULL)  != 0 )
    {
        // An error should already have been reported
        CPLFree(pszPath);
        CPLFree(pszBasename);
        Close();
        return -1;
    }

    CPLFree(pszPath);
    CPLFree(pszBasename);

    return 0;
}



/**********************************************************************
 *                   TABView::ParseTABFile()
 *
 * Scan the lines of the TAB file, and store any useful information into
 * class members.  The main piece of information being the sub-table
 * names, and the list of fields to include in the view that we will
 * use to build the OGRFeatureDefn for this file.
 *
 * It is assumed that the TAB header file is already loaded in m_papszTABFile
 *
 * This private method should be used only during the Open() call.
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABView::ParseTABFile(const char *pszDatasetPath, 
                          GBool bTestOpenNoError /*=FALSE*/)
{
    int         iLine, numLines;
    char        **papszTok=NULL;
    GBool       bInsideTableDef = FALSE;

    if (m_eAccessMode != TABRead)
    {
        CPLError(CE_Failure, CPLE_AssertionFailed,
                 "ParseTABFile() can be used only with Read access.");
        return -1;
    }

    numLines = CSLCount(m_papszTABFile);

    for(iLine=0; iLine<numLines; iLine++)
    {
        /*-------------------------------------------------------------
         * Tokenize the next .TAB line, and check first keyword
         *------------------------------------------------------------*/
        CSLDestroy(papszTok);
        papszTok = CSLTokenizeStringComplex(m_papszTABFile[iLine], " \t(),;",
                                            TRUE, FALSE);
        if (CSLCount(papszTok) < 2)
            continue;   // All interesting lines have at least 2 tokens

        if (EQUAL(papszTok[0], "!version"))
        {
            m_pszVersion = CPLStrdup(papszTok[1]);
        }
        else if (EQUAL(papszTok[0], "!charset"))
        {
            CPLFree(m_pszCharset);
            m_pszCharset = CPLStrdup(papszTok[1]);
        }
        else if (EQUAL(papszTok[0], "open") &&
                 EQUAL(papszTok[1], "table") &&
                 CSLCount(papszTok) >= 3)
        {
            // Source table name may be either "filename" or "filename.tab"
            int nLen = strlen(papszTok[2]);
            if (nLen > 4 && EQUAL(papszTok[2]+nLen-4, ".tab"))
                papszTok[2][nLen-4] = '\0';

            m_papszTABFnames = CSLAppendPrintf(m_papszTABFnames, 
                                               "%s%s.tab", 
                                               pszDatasetPath, papszTok[2]);
        }
        else if (EQUAL(papszTok[0], "create") &&
                 EQUAL(papszTok[1], "view") )
        {
            bInsideTableDef = TRUE;
        }
        else if (bInsideTableDef &&
                 (EQUAL(papszTok[0],"Select")))
        {
            /*---------------------------------------------------------
             * We found the list of table fields (comma-delimited list)
             *--------------------------------------------------------*/
            int iTok;
            for(iTok=1; papszTok[iTok] != NULL; iTok++)
                m_papszFieldNames = CSLAddString(m_papszFieldNames, 
                                                 papszTok[iTok]);

        }
        else if (bInsideTableDef &&
                 (EQUAL(papszTok[0],"where")))
        {
            /*---------------------------------------------------------
             * We found the where clause that relates the 2 tables
             * Something in the form:
             *   where table1.field1=table2.field2
             * The tokenized array will contain:
             *  {"where", "table1", "field1", "table2", "field2"}
             *--------------------------------------------------------*/
            m_papszWhereClause =CSLTokenizeStringComplex(m_papszTABFile[iLine],
                                                         " \t(),;=.",
                                                         TRUE, FALSE);

            /*---------------------------------------------------------
             * For now we are very limiting on the format of the WHERE
             * clause... we will be more permitting as we learn more about
             * what it can contain... (I don't want to implement a full SQL 
             * parser here!!!).  If you encountered this error,
             * (and are reading this!) please report the test dataset 
             * that produced the error and I'll see if we can support it.
             *--------------------------------------------------------*/
            if (CSLCount( m_papszWhereClause ) != 5)
            {
                if (!bTestOpenNoError)
                    CPLError(CE_Failure, CPLE_NotSupported,
                     "WHERE clause in %s is not in a supported format: \"%s\"",
                             m_pszFname, m_papszTABFile[iLine]);
                return -1;
            }
        }
        else
        {
            // Simply Ignore unrecognized lines
        }
    }

    CSLDestroy(papszTok);

    /*-----------------------------------------------------------------
     * The main table is the one from which we read the geometries, etc...
     * For now we assume it is always the first one in the list
     *----------------------------------------------------------------*/
    m_nMainTableIndex = 0;

    /*-----------------------------------------------------------------
     * Make sure all required class members are set
     *----------------------------------------------------------------*/
    m_numTABFiles = CSLCount(m_papszTABFnames);

    if (m_pszCharset == NULL)
        m_pszCharset = CPLStrdup("Neutral");
    if (m_pszVersion == NULL)
        m_pszVersion = CPLStrdup("100");

    if (CSLCount(m_papszFieldNames) == 0 )
    {
        if (!bTestOpenNoError)
            CPLError(CE_Failure, CPLE_NotSupported,
                     "%s: header contains no table field definition.  "
                     "This type of .TAB file cannot be read by this library.",
                     m_pszFname);
        return -1;
    }

    if (CSLCount(m_papszWhereClause) == 0 )
    {
        if (!bTestOpenNoError)
            CPLError(CE_Failure, CPLE_NotSupported,
                     "%s: WHERE clause not found or missing in header.  "
                     "This type of .TAB file cannot be read by this library.",
                     m_pszFname);
        return -1;
    }
    return 0;
}


/**********************************************************************
 *                   TABView::WriteTABFile()
 *
 * Generate the TAB header file.  This is usually done during the 
 * Close() call.
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABView::WriteTABFile()
{
    FILE *fp;

    CPLAssert(m_eAccessMode == TABWrite);
    CPLAssert(m_numTABFiles == 2);
    CPLAssert(GetLayerDefn());

    char *pszTable  = TABGetBasename(m_pszFname);
    char *pszTable1 = TABGetBasename(m_papszTABFnames[0]);
    char *pszTable2 = TABGetBasename(m_papszTABFnames[1]);

    if ( (fp = VSIFOpen(m_pszFname, "wt")) != NULL)
    {
        // Version is always 100, no matter what the sub-table's version is
        fprintf(fp, "!Table\n");
        fprintf(fp, "!Version 100\n");

        fprintf(fp, "Open Table \"%s\" Hide\n", pszTable1);
        fprintf(fp, "Open Table \"%s\" Hide\n", pszTable2);
        fprintf(fp, "\n");
        fprintf(fp, "Create View %s As\n", pszTable);
        fprintf(fp, "Select ");

        OGRFeatureDefn *poDefn = GetLayerDefn();
        for(int iField=0; iField<poDefn->GetFieldCount(); iField++)
        {
            OGRFieldDefn *poFieldDefn = poDefn->GetFieldDefn(iField);
            if (iField == 0)
                fprintf(fp, "%s", poFieldDefn->GetNameRef());
            else
                fprintf(fp, ",%s", poFieldDefn->GetNameRef());
        }
        fprintf(fp, "\n");

        fprintf(fp, "From %s, %s\n", pszTable2, pszTable1);
        fprintf(fp, "Where %s.%s=%s.%s\n", pszTable2, 
                                           m_poRelation->GetRelFieldName(),
                                           pszTable1, 
                                           m_poRelation->GetMainFieldName());


        VSIFClose(fp);
    }
    else
    {
        CPLError(CE_Failure, CPLE_FileIO,
                 "Failed to create file `%s'", m_pszFname);
        return -1;
    }

    CPLFree(pszTable);
    CPLFree(pszTable1);
    CPLFree(pszTable2);

    return 0;
}


/**********************************************************************
 *                   TABView::Close()
 *
 * Close current file, and release all memory used.
 *
 * Returns 0 on success, -1 on error.
 **********************************************************************/
int TABView::Close()
{
    // In write access, the main .TAB file has not been written yet.
    if (m_eAccessMode == TABWrite && m_poRelation)
        WriteTABFile();

    for(int i=0; m_papoTABFiles && i<m_numTABFiles; i++)
    {
        if (m_papoTABFiles[i])
            delete m_papoTABFiles[i];  // Automatically closes.
    }
    CPLFree(m_papoTABFiles);
    m_papoTABFiles = NULL;
    m_numTABFiles = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色欧美88888久久久久久影院| 欧美日本精品一区二区三区| 91蜜桃网址入口| 亚洲精品一区二区三区精华液 | 成人一区二区三区中文字幕| 国产精品美女久久久久aⅴ国产馆| 欧美中文字幕不卡| 国产高清不卡二三区| 丝袜诱惑制服诱惑色一区在线观看| 久久久激情视频| 777午夜精品免费视频| 色综合久久99| 成人国产精品免费观看动漫 | 成人毛片在线观看| 日韩国产高清在线| 一区二区三区精品| 国产精品美女久久久久久2018| 日韩欧美亚洲一区二区| 欧美影视一区在线| 色综合久久中文字幕综合网| 激情成人午夜视频| 天天做天天摸天天爽国产一区 | 成人免费三级在线| 国产一区在线看| 老司机免费视频一区二区三区| 一区二区三区中文免费| 中文字幕在线观看一区| 精品国产乱码久久久久久久久| 欧美高清dvd| 欧美日韩国产综合一区二区| 色综合天天综合| 成人激情免费视频| 懂色av中文字幕一区二区三区| 日本视频中文字幕一区二区三区| 亚洲一卡二卡三卡四卡| 亚洲免费观看在线视频| 国产精品国产精品国产专区不片| 国产三级一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 精品国产99国产精品| 日韩网站在线看片你懂的| 欧美日韩成人综合| 欧美狂野另类xxxxoooo| 91亚洲精品一区二区乱码| 国产一区欧美一区| 首页亚洲欧美制服丝腿| 亚洲免费av在线| 久久久av毛片精品| 欧美日韩国产一级二级| 精品久久一二三区| 99精品欧美一区二区蜜桃免费| 日韩精品久久理论片| 亚洲高清免费观看高清完整版在线观看| 精品国产成人在线影院| 欧美精品一区二| 国产黄色精品网站| 国产成人精品免费视频网站| 成人av电影在线播放| 99re热视频精品| 91丨porny丨户外露出| 欧美羞羞免费网站| 欧美一级二级三级乱码| 日韩精品一区在线| 国产亚洲综合性久久久影院| 中文字幕+乱码+中文字幕一区| 欧美国产日韩a欧美在线观看| 一区在线观看免费| 午夜久久电影网| 久久精品国产色蜜蜜麻豆| 风间由美一区二区三区在线观看| 国模一区二区三区白浆| 风间由美一区二区av101| 成人av在线一区二区| 在线观看欧美黄色| 制服视频三区第一页精品| 精品福利一区二区三区免费视频| 国产欧美日韩中文久久| 日韩理论电影院| 免费在线观看精品| 成人激情校园春色| 欧美性生活久久| 久久精品视频网| 一区二区三区国产精品| 精品无人区卡一卡二卡三乱码免费卡| 国产精品66部| 欧美另类高清zo欧美| 久久精品视频网| 午夜精品影院在线观看| 懂色av一区二区在线播放| 欧美日韩在线一区二区| 亚洲精品一线二线三线| 亚洲一区二区三区四区在线观看| 久久99精品国产.久久久久久| 91小视频免费看| 久久日一线二线三线suv| 亚洲精品国产成人久久av盗摄| 免费久久精品视频| 色综合中文字幕国产 | 麻豆国产一区二区| 91蜜桃在线免费视频| 精品国产91洋老外米糕| 亚洲国产成人porn| 欧美一区二区播放| 麻豆精品在线看| 久久久亚洲高清| 日韩在线播放一区二区| 91久久线看在观草草青青| 欧美精彩视频一区二区三区| 一本到不卡免费一区二区| 日韩美女在线视频| 亚洲福利一二三区| 欧美人动与zoxxxx乱| 亚洲国产成人av好男人在线观看| 91亚洲国产成人精品一区二三| 91超碰这里只有精品国产| 精品成人一区二区三区| 亚洲成人av在线电影| 91蜜桃传媒精品久久久一区二区| 久久久久久99久久久精品网站| 日本女人一区二区三区| 欧美日韩1区2区| 亚洲国产日韩a在线播放性色| 97久久精品人人做人人爽| 日本一二三四高清不卡| 国产精品18久久久久久久久| 欧美成人伊人久久综合网| 日韩高清一级片| 91麻豆精品久久久久蜜臀| 偷拍日韩校园综合在线| 欧洲在线/亚洲| 亚洲欧美另类综合偷拍| 成人动漫在线一区| 精品国产99国产精品| 久久99精品久久久久| 欧美日韩国产综合草草| 亚洲欧美日韩在线| 成人美女在线观看| 中文字幕不卡的av| 国产91色综合久久免费分享| 日韩一区二区精品在线观看| 三级亚洲高清视频| 日本乱码高清不卡字幕| 国产精品久久久久久久久快鸭 | 国产高清视频一区| 欧美成人video| 久久99国产精品麻豆| 欧美一区二区国产| 亚洲一区二区视频在线| 欧美日韩精品三区| 五月天视频一区| 欧美三片在线视频观看 | 一本色道久久综合精品竹菊| 亚洲女女做受ⅹxx高潮| yourporn久久国产精品| 国产精品久久毛片a| 成人97人人超碰人人99| 久久精品男人天堂av| 国产精品99久久久| 欧美激情中文字幕一区二区| 国产精品99久久久久久久女警| 欧美一区二区三区男人的天堂 | 国产不卡视频在线播放| 精品va天堂亚洲国产| 韩国精品在线观看| 2014亚洲片线观看视频免费| 国产老肥熟一区二区三区| 国产午夜亚洲精品不卡| 99re亚洲国产精品| 亚洲激情在线激情| 777久久久精品| 精品午夜久久福利影院| 国产人成亚洲第一网站在线播放 | 本田岬高潮一区二区三区| 中文字幕日韩av资源站| 在线精品视频一区二区| 青青草国产精品97视觉盛宴| 日韩免费电影一区| 九九热在线视频观看这里只有精品| 欧美激情一区二区在线| 色婷婷综合久久久| 日韩电影一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 91福利国产成人精品照片| 免费在线观看一区| 欧美激情艳妇裸体舞| 亚洲色图制服诱惑 | 一本到高清视频免费精品| 午夜a成v人精品| 日韩欧美亚洲国产另类| 成人性生交大片免费看视频在线| 国产视频一区二区在线| 91久久免费观看| 日韩av电影天堂| 中文字幕中文字幕一区二区| 日韩欧美在线观看一区二区三区| 成人一区二区三区| 亚洲大片免费看| 久久综合色婷婷| 在线播放亚洲一区| 成人精品国产一区二区4080|