C++ - 在文本文件中查找和替换(标准系统库)

2024-04-10

我正在寻找一些建议。

我的情况:

  • 应用程序适用于文本本地文件.

  • 文件中的某处有这样的标签:

    
    correct = "TEXT"  
    。不幸的是,之间可以有无限的空格correct, = and "TEXT".
  • 获得的文本正在功能测试中,可能会被替换(更改必须存储在文件中).

    
     correct = "CORRECT_TEXT"  

我目前的理论方法:

  • With ofstream-- 按行读取到字符串。

  • 找到标签并在字符串中进行更改。

  • 将字符串作为行保存到文件中。


C++ 中是否有一些简化方法(使用迭代器?)仅标准系统库 (unix).

谢谢你的想法。


这是一个可能的解决方案,使用:

  • std::getline() http://en.cppreference.com/w/cpp/string/basic_string/getline
  • std::copy() http://en.cppreference.com/w/cpp/algorithm/copy
  • istream_iterator http://en.cppreference.com/w/cpp/iterator/istream_iterator
  • ostream_iterator http://en.cppreference.com/w/cpp/iterator/ostream_iterator
  • vector http://en.cppreference.com/w/cpp/container/vector

Example:

#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <string>
#include <vector>

struct modified_line
{
    std::string value;
    operator std::string() const { return value; }
};
std::istream& operator>>(std::istream& a_in, modified_line& a_line)
{
    std::string local_line;
    if (std::getline(a_in, local_line))
    {
        // Modify 'local_line' if necessary
        // and then assign to argument.
        //
        a_line.value = local_line;
    }
    return a_in;
}

int main() 
{
    std::ifstream in("file.txt");

    if (in.is_open())
    {
        // Load into a vector, modifying as they are read.
        //
        std::vector<std::string> modified_lines;
        std::copy(std::istream_iterator<modified_line>(in),
                  std::istream_iterator<modified_line>(),
                  std::back_inserter(modified_lines));
        in.close();

        // Overwrite.
        std::ofstream out("file.txt");
        if (out.is_open())
        {
            std::copy(modified_lines.begin(),
                      modified_lines.end(),
                      std::ostream_iterator<std::string>(out, "\n"));
        }
    }

    return 0;
}

我不确定线条的具体操作应该是什么,但您可以使用:

  • std::string::find() http://en.cppreference.com/w/cpp/string/basic_string/find and std::string::substr() http://en.cppreference.com/w/cpp/string/basic_string/substr
  • boost::split() http://www.boost.org/doc/libs/1_49_0/doc/html/boost/algorithm/split_id820181.html

EDIT:

为了避免将初始的每一行一次存储在内存中copy()可以更改为写入替代文件,后跟一个文件rename() http://en.cppreference.com/w/cpp/io/c/rename:

std::ifstream in("file.txt");
std::ofstream out("file.txt.tmp");

if (in.is_open() && out.open())
{
    std::copy(std::istream_iterator<modified_line>(in),
              std::istream_iterator<modified_line>(),
              std::ostream_iterator<std::string>(out, "\n"));

    // close for rename.
    in.close();
    out.close();

    // #include <cstdio>
    if (0 != std::rename("file.txt.tmp", "file.txt"))
    {
        // Handle failure.
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ - 在文本文件中查找和替换(标准系统库) 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce

随机推荐

  • APC 命中/未命中和配置

    APC 操作码缓存中的 命中和未命中 是什么 我已经安装了 APC 并且运行得很好 但是我有 一些 失误 我想知道这是否是 坏 的 另外 我正在运行 Openx 因此 很快就会填满 缓存完整计数 我需要在配置中更改哪些内容才能最大限度地减少
  • 打印大型 TCL 项目的源层次结构

    因此 我正在处理一个大型 TCL 项目 并且认为构建一个树状视图来显示文件在项目中的来源方式会很酷 我修改了源命令以执行以下操作 rename source real source proc source args set file han
  • JavaFx 12 Spring,Maven 未找到前缀插件

    我在尝试使用 javafx 和 spring 调试项目时遇到问题 我的pom XML
  • UISplitViewController:如何强制在应用程序启动时显示主弹出框? (肖像)

    在 iPad 应用程序中 我使用 UISplitViewController 当应用程序以纵向模式启动时 我需要强制显示主弹出窗口 现在我正在使用这段代码 它在 iOS 5 0 上运行良好 if UIInterfaceOrientation
  • UWP 从任务更新 UI

    我有一个应用程序 它正在检查本地网络中的网络范围 用于运行http服务 所以这意味着我正在检查 f e 从 10 0 0 1 到 10 0 0 255 问题来了 在PC上运行时 速度足够 但在Lumia 950上运行时 速度不够 所以我想在
  • 如何使用 JOINED 继承策略和 Hibernate 创建现有超级对象的子对象

    如何使用 Hibernate 创建持久化超级对象的子对象的正确方法是什么 考虑以下示例 在数据库中被持久化UserID 为 1 名字为 Kevin 激光名字为 Smith 到时候新Entity的数据库模型扩展了Auditor这是哪个子类Us
  • 从外部类访问私有变量 - iOS

    我在类中有一个私有变量 我试图从外部类访问该变量 我有办法做到这一点吗 根据定义 私有实例变量是私有的 您无法从外部访问它们 如果您是该类的作者 则应该为变量提供访问器方法 如果不是 则应避免访问该变量 但是 有一些方法可以规避该限制 您可
  • 在应用程序启动时清除所有会话

    我注意到 当我重新启动 ASP Net 应用程序时 会记住已登录用户的凭据 并且他们可能会发现自己已自动登录 只要不保留在登录时设置的用户会话变量 这种行为就是不需要的 那么 我怎样才能 忘记 应用程序启动时的所有会话呢 我发现我无法使用S
  • Spring WebApp中使用Elasticsearch客户端时出现链接错误

    我在尝试将 Elasticsearch java 客户端包含在我的 Web 应用程序中时遇到问题 我有所需的依赖项 并且我正在初始化 销毁 Spring bean 中创建客户端 作为一个简单的测试 如下所示 Override public
  • 找不到 gem Railties (>= 0.a) (Gem::GemNotFoundException)

    我已经看到了一些其他问题 尝试了他们的建议 但没有一个对我有用 我已经使用 Rails 大约一年了 刚刚开始一个新的 Rails 项目 突然遇到了问题 我卸载并尝试重新安装所有 Ruby 和 Rails Ruby 很好 但 Rails 不行
  • Rails 4 中的 autoload_paths 与 eager_load_paths 令人困惑

    我读了一篇关于 Rails load paths 的文章 这里是link http hakunin com rails3 load paths 但是 我仍然对两者之间的区别感到困惑autoload paths and eager load
  • Spring不接受POST参数,除非@RequestParam“required = false”

    我正在运行 Spring 3 1 2 应用程序 我有一个带有多种方法的 RESTful servlet GET 方法运行得非常好 PathVariables匹配 响应根据 Accept 标头正确编组为 JSON 或 XML 等等 100 成
  • WPF:如何以任意角度旋转 BitmapSource

    好的 我尝试过这个 TransformedBitmap tbm new TransformedBitmap myBitmapSource new RotateTransform angle return tbm 但这不适用于 90 度倍数以
  • 为暂停的订阅纠正 paypal IPN 变量

    如果按月付费订阅者的信用卡已过期 而 PayPal 尝试获取资金失败 3 次 则该用户将被 PayPal 暂停 我正在尝试更新我的 PHP 脚本 以便在这种情况下数据库中发生正确的更改 我研究了 PayPal 文档 但无法找到关于一旦用户帐
  • 放弃所有本地更改并返回到最后拉取的版本

    我如何在 git 中放弃所有本地更改 提交并返回到最后拉取的版本 命令必须位于一个字符串 字段 中 You can reset https git scm com book en v2 Git Tools Reset Demystified
  • 在 Spring Boot 中转义 Yaml 中的 Map 键中的点

    我有以下 yml 配置 foo bar com a b baz com a c 通过以下类 Spring 尝试使用键 bar 和 baz 注入映射 将点视为分隔符 public class JavaBean private Map
  • 如何在 log4j2 中生成标题行

    在 log4j 中 我们有时会创建第二个记录器并向其输出 CSV 数据 作为应用程序的指标监视 与我们用于调试等的普通日志相反 这些数据很容易导入和绘制图表 在旧的 log4j 中 我们通过子类化 PatternLayout 覆盖 head
  • 如何找到“无法加载‘xxx.dll’导入的过程”的来源。例外?

    过去一周我一直在追求这个例外 情况是 我有一个用 C 编写并在 Visual Studio 2010 中构建的应用程序 该应用程序包含一个 DLL 它是非托管代码库的包装器 非托管代码是用 C 编写的 并在 Visual Studio 20
  • 如何将系统变量值传递给执行 SQL 任务中的 SQL 语句?

    SSIS 2008 非常简单的任务 我想检索系统变量并在 SQL INSERT 中使用它 我想检索的值System MachineName并在插入语句中使用它 使用声明INSERT INTO MYLOG COL1 SELECT System
  • C++ - 在文本文件中查找和替换(标准系统库)

    我正在寻找一些建议 我的情况 应用程序适用于文本本地文件 文件中的某处有这样的标签 correct TEXT 不幸的是 之间可以有无限的空格correct and TEXT 获得的文本正在功能测试中 可能会被替换 更改必须存储在文件中 co