0

XML ファイル内のすべてのタグを取得するためのカスタム関数を作成しています。私はこのコードを使用しています:

wchar_t *GetLine(wchar_t *fileName=L"indexing.xml", wchar_t endSymbol = '\n')
{
    SetFilePointer(hReadFile,sizeof(wchar_t) * position, NULL, FILE_BEGIN);
    int size;
    wchar_t wchr[1];
    DWORD dw;
    size = 0;
    do
    {
        ReadFile(hReadFile, wchr, sizeof(wchar_t), &dw, NULL);
        if(!dw)
        {
            break;
        }
        tempGetLine[size] = wchr[0];
        size++;
    }while(wchr[0] != endSymbol);
    tempGetLine[size] = '\0';
    position += (size);
    return tempGetLine;
}
wchar_t *GetTag(wchar_t *fileName = L"indexing.xml")
{
    wchar_t *temp = GetLine(fileName,'>');
    int i = 0;
    while(*temp != '\0')
    {
        tempTag[i] = *temp;
        i++;
        temp++;
    }
    tempTag[i] = '\0';
    return tempTag;
}

動作しますが、大きなファイルでは多くの反復が必要です。コードを最適化するにはどうすればよいですか?

4

2 に答える 2

1

おそらく、適切なパーサジェネレータへの移行を検討する必要があります。

このようなタスクに適したC++ライブラリはboostspirit-qiであり、XMLの例もあります。

http://www.boost.org/doc/libs/1_51_0/libs/spirit/doc/html/index.html

xmlの例

于 2012-10-28T13:34:28.060 に答える
0

すべてのタグを呼び出しSetFilePointer()ているようです。の呼び出しの間にファイルへの他の読み取りまたは書き込みを行っていない場合は、わざわざ呼び出す必要はありません。これは不要です。この呼び出しにより、OS によって行われるバッファリングの量が減少する可能性があります。GetTag()SetFilePointer()

于 2012-10-28T13:58:35.247 に答える