将 pugixml 的结果偏移量转换为列/行
Convert pugixml's result.offset to column/line
我需要为使用 pugixml 的应用程序提供用户友好的错误报告。
我目前正在使用结果偏移量。
有没有办法代替行和列?我可能会处理大型 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]);
}
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 通过指针偏移量访问结构变量值
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- librdkafka:rd_kafka_assignment 返回分配分区的偏移量 -1001
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 向指针地址添加 20 个字节偏移量
- glMapBufferRange(..) 中的偏移量关系和 glDrawArraysInstanced(..) 中的第一
- 是否有与 C# Structs/StructLayout 等效的功能,C++中的字段偏移量?
- 我的 sumASCII 函数中的此偏移量是多少?
- boost::序列化中的派生类偏移量计算.有效吗?
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 胎面偏移量的时间复杂度?
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- 编译器在构造函数中计算的成员偏移量不正确
- 使用基地址和偏移量获取变量的地址
- c++ 读取进程内存基址 + 偏移量不起作用
- 将 pugixml 的结果偏移量转换为列/行
- C++ 将部分数组(在某些偏移量)转换为其他类型
- 通过强制转换 nullptr 获取成员变量的偏移量
- 在cv::Mat中将float转换为uchar的偏移量