将pugixml的result.offset转换为列/行

2024-02-19

我需要为使用 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]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将pugixml的result.offset转换为列/行 的相关文章

随机推荐

  • ruby 中是否可以取消定义变量?

    在 ruby 中 有没有办法在定义变量或常量后 取消定义 变量或常量 在我们的 Rails 环境中 我们将三个内容之一定义为true 取决于环境 TESTING DEVELOPMENT or PRODUCTION 然后 在控制器代码中 我们
  • 在Fabric js中的两个对象之间添加动画

    我有一个非常基本的应用程序 可让您创建形状并用线连接它们 为此 您需要执行以下操作 Example 1 Click new animation 2 add rectangle 3 add child 4 add circle 您可以移动形状
  • 将基本脚本转换为 Objective C(货币格式)

    我有这个基本的类似脚本 我需要将其转换为 Objective C 它将大单位的金钱转换为缩短的版本 即 1 2m 等 我已经完成了大部分转换 但最大的问题是我我就在最后 原来的基本代码是 Basic Code Function ShortC
  • mysqli_result 类的对象无法转换为字符串返回 mysql 平均值 [重复]

    这个问题在这里已经有答案了 有人能解释一下我如何输出下面的sql结果吗 当前收到 mysqli result 类的对象无法转换为字符串 sql SELECT AVG ab satisfactionScore AS AverageSatisf
  • Jenkins 管道作业:从字符串参数设置睡眠时间?

    我是 Jenkins Pipeline 工作的新手 我面临着一个无法解决的问题 我有一个带有硬编码的舞台sleep秒值 stage wait prior starting smoke testing echo Waiting 5 minut
  • 抑制 C 宏变量替换

    我有这段代码 实际上是垃圾收集 Forth 系统解释器的一部分 define PRIMITIVE name do VocabEntry entry VocabEntry gc alloc sizeof VocabEntry entry gt
  • 如何让 Capistrano 3 使用 RVM ruby​​?

    Gemfile gem capistrano gt 3 0 0 gem capistrano rails gem capistrano bundler gem capistrano rvm gem capistrano3 puma 部署 r
  • AspNetCore 2.1 中使用 WsFederation 时出现注销 (LogOut) 错误

    我在 ASP NET Core 2 1 应用程序中注销 注销 时收到以下错误 没有为 联合 方案注册注销身份验证处理程序 注册的注销方案有 WsFederation Cookies 您是否忘记调用 AddAuthentication Add
  • 撇号打印为 â\x80\x99

    import requests from bs4 import BeautifulSoup import re source url requests get http www nytimes com pages business inde
  • PostgreSQL:在 Ubuntu 上重置 PostgreSQL 的密码 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在 Ubuntu 中 我安装了 PostgreSQL 数据库并为服务器创建了一个超级用户 如果我忘记了 postgresql 超级用户的密码 如何为该
  • vue-router - 使用新导航取消从“/”到“/password”的导航

    尝试导航到密码页面 vue router 抛出此错误 Uncaught in promise Error Navigation cancelled from to password with a new navigation 导航到密码页面
  • python 多处理/线程清理

    我有一个 python 工具 基本上有这样的设置 main process P1 gt spawns a process P2 that starts a tcp connection gt spawns a thread T1 that
  • 如何从keycloak中的自定义客户端获取角色?

    为了获得自定义客户端中的角色 我知道我需要执行两个 API 一种是获取访问令牌 一种是获取角色 我的疑问是 我应该通过在标头中发送 admin CLI 详细信息来获取 accessToken 还是因为我想要我创建的自定义客户端的角色 因为
  • 从字符串中删除最后两个单词

    我完全陌生preg replace 但下面的代码从我的字符串中删除了最后一个单词 preg replace W w s W 1 var 我正在尝试修改它 以便它删除最后一个two words 我唯一能想到的就是更换 1 with 2 但这似
  • C读取二进制数并将其转换为Ascii码

    我试图从文件中读取以下二进制文件 01100001 并将其转换为 ascii 代码 97 但是当使用 fread 时我得到了一个非常大的数字 文件 c input txt 仅包含以下行 01100001 数组值的 printf 打印大数字
  • 如何获取作为不同 Drawable 的镜像版本的 Drawable?

    背景 我知道可以创建一个可绘制对象 或位图 的旋转版本 这样 写过关于它的here https stackoverflow com a 21376008 878126 JvmStatic fun getRotateDrawable d Dr
  • 制作或预定义嵌套字典/JSON 的结构 || Python

    输入 我有包含 3 列的 Excel 文件 Excel 文件的格式如下 A C D A C E A F G B H J B H K A F I B L M B L N A F O 我希望根据上面的输入以以下格式制作字典 输出 diction
  • 创建带有已保存图标的通知

    在我的应用程序中 用户从安装的应用程序列表中选择一个应用程序 他们的电话 我想创建一个带有所选应用程序图标的通知 问题是我无法将图标保存在应用程序中 如果我将其保存在其他地方 我将无法通过 id 获取图标 因为它需要创建通知 我该如何解决这
  • Go中接口的使用

    我想了解接口类型simple它在 Go 语言 中的使用示例 我阅读了网络文档 但我不明白 go接口背后的想法是鸭子打字 http en wikipedia org wiki Duck typing 简单来说就是 如果你看起来像鸭子 嘎嘎叫起
  • 将pugixml的result.offset转换为列/行

    我需要为使用 pugixml 的应用程序提供用户友好的错误报告 我目前正在使用 result offset 有没有办法代替行和列 我可能会处理大型 XML 文件 如果这有影响的话 此功能在 pugixml 中并不容易使用 因为在每次解析时执