gpt4 book ai didi

c++ - 将pugixml的result.offset转换为column/line

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:52 25 4
gpt4 key购买 nike

我需要为使用 pugixml 的应用程序提供用户友好的错误报告。
我目前正在使用 result.offset。
有没有办法获取行和列?我可能会处理大型 XML 文件,如果这有所不同的话。

最佳答案

此功能在 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]);
}

关于c++ - 将pugixml的result.offset转换为column/line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com