2014-01-08 32 views

回答

5

此功能在pugixml現成的,因爲它是相對昂貴的做每解析和解析,並完成後,這是不可能恢復的文件/行信息在一般情況下。

下面是建立一個偏移一個片段 - 你可以在分析的情況下使用>在線地圖失敗,或者你需要其他原因的信息;隨意調整文件I/O代碼以符合您的要求。

typedef std::vector<ptrdiff_t> offset_data_t; 

bool build_offset_data(offset_data_t& result, const char* file) 
{ 
    FILE* f = fopen(file, "rb"); 
    if (!f) return false; 

    ptrdiff_t offset = 0; 

    char buffer[1024]; 
    size_t size; 

    while ((size = fread(buffer, 1, sizeof(buffer), f)) > 0) 
    { 
    for (size_t i = 0; i < size; ++i) 
     if (buffer[i] == '\n') 
      result.push_back(offset + i); 

    offset += size; 
    } 

    fclose(f); 

    return true; 
} 

std::pair<int, int> get_location(const offset_data_t& data, ptrdiff_t offset) 
{ 
    offset_data_t::const_iterator it = std::lower_bound(data.begin(), data.end(), offset); 
    size_t index = it - data.begin(); 

    return std::make_pair(1 + index, index == 0 ? offset + 1 : offset - data[index - 1]); 
} 
+0

這是極好的。謝謝! –