读写文本文件的最佳方法

2024-04-28

我正在使用最新版本的 Lazarus IDE,并且我有一个Memo1在我的 TForm1 上。我必须加载一个文本文件Memo1然后编辑备忘录的每一行(我使用Memo1.Lines.Strings[i] := ...)。最后,我必须将编辑后的备忘录保存在特定路径中。

Question:我正在寻找以下之间更快的方法:

  1. 加载备忘录中的整个文本,编辑其内容并保存到新文件中(加载全部 -> 编辑全部 -> 写入全部)
  2. Do a while循环(直到我的*.txtfile) 逐行读取文件,编辑内容并将其保存在新文件中。 (加载行 -> 编辑 -> 写入 | 加载 -> 编辑 -> 写入 | 加载行 -> 编辑 -> 写入 | ...)

我对 Delphi 开发还很陌生,我也读过一些关于TStringLists。我的文本文件将有很多行(可能有 5000 多行),我不希望我的程序失去性能。

有什么建议吗?我应该使用TStringList或者我之前列出的两种方法之一?


5000行数并不多,除非字符串很长。

最简单的方法是使用TStringList。除非用户需要查看或编辑内容,否则无需使用 GUI 控件。

var
  SL: TStringList;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile(YourFileNameHere);
    for i := 0 to SL.Count - 1 do
    begin
      SL[i] := IntToStr(i) + ' ' + SL[i];
      // Do any other processing
    end;

    SL.SaveToFile(YourFileNameHere);
  finally
    SL.Free;
  end;
end;

如果(正如您在上面的评论中所说)您需要在TMemo出于测试目的,您可以按照相同的方式执行此操作:

Memo1.Lines.LoadFromFile(YourFileNameHere);
for i := 0 to Memo1.Lines.Count - 1 do
  Memo1.Lines[i] := IntToStr(i) + ' ' + Memo1.Lines[i];
Memo1.Lines.SaveToFile(YourFileNameHere);

当然,最简单的方法是编写一个接受普通数据的过程TStrings任何种类的后代:

procedure AppendValueToStrings(const SL: TStrings; 
  StartingValue: Integer);
var
  i: Integer;
begin
  Assert(Assigned(SL));  // Make sure a valid TStrings has been passed in
  for i := 0 to SL.Count - 1 do
  begin
    SL[i] := IntToStr(StartingValue) + ' ' + SL[i];
    Inc(StartingValue);
  end;
end; 

然后您可以使用其中之一来调用它:

SL := TStringList.Create;
try
  SL.LoadFromFile(YourFileNameHere);
  AppendValueToStrings(SL, 10);
  SL.SaveToFile(YourFileNameHere);
finally
  SL.Free;
end;

Memo1.Lines.LoadFromFile(YourFileNameHere);
AppendValueToStrings(Memo1.Lines, 10);
Memo1.Lines.SaveToFile(YourFileNameHere);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读写文本文件的最佳方法 的相关文章

  • Firemonkey 移动应用程序和远程 MySQL

    我正在使用 Delphi XE5 并且我已经创建了基本的 Firemonkey 移动应用程序 Delphi 我想连接到远程 MySQL 数据库 我应该使用哪一个数据库管道 FireDAC DBExpress 等 您可以使用标准 TSQLQu
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • Python多重处理使用队列写入同一文件

    我知道 Stack Exchange 上有很多与将多处理结果写入单个文件相关的帖子 并且我在阅读了这些帖子后就开发了我的代码 我想要实现的是并行运行 RevMapCoord 函数并使用 multiprocess queue 将其结果写入一个
  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • 如何仅在某些列中设置带有复选框的 TListView?

    我正在使用 Delphi 2010 并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择 使用 TListView 我可以将样式设置为 vsReport 并启用复选框 但这只会让我每行有 1 个复选框 我需要的是每行
  • DELPHI win32 的 ORM [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 Delphi Win32 的 ORM 或类似的东西吗 Marco Cantu 是 Insta
  • 为什么Delphi打开时间越长编译速度就越慢,我该怎么办?

    我的公司十多年来一直在德尔福上运行一个大型项目 我们的代码库多年来一直在增长 目前代码数量约为 400 万行 编译速度正在成为一个问题 我们花了时间清除单元循环引用 编译缓慢的已知原因 并检查了设置的各个方面 已经到了我们无法通过我们所能控
  • 在 Delphi 7 中使用 TScreen

    我的 Delphi 7 应用程序显示 Screen DesktopWidth Screen DesktopHeight Screen Monitors 0 Width Screen Monitors 0 Height 并且 如果选择了第二台
  • 如何修复 Delphi Prism ASP.NET 错误:“解析器错误消息:‘Oxygene’不是受支持的语言”

    我在 Delphi Prism 中编写了一个 ASP NET Web 应用程序 不是网站 在我的开发机器上一切正常 但是当我将其安装在测试服务器上时 出现以下错误 Server Error in MyApp Application Pars
  • 加快写入多个图像 TIFF 的速度?

    我正在尝试将图像堆栈写入 TIFF 文件 图像大小为 256 256 像素 每个堆栈包含 1000 张图像 编写其中一个文件大约需要 4 分钟 所以我的代码很可能有问题 这就是我正在做的 void Tiff WriterSplit floa
  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • Winform 没有.NET 框架?

    我必须创建一些表单并将其作为直接 EXE 提供 而不是安装程序 它安装 NET 框架 最终用户对此不满意 他们想要可以直接打开和工作的东西 我知道它可以作为网络完成 但我正在寻找 winforms 吗 请建议哪种工具 技术可以处理这个问题
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • 使用 Node.js 将对象写入文件

    我已经在 stackoverflow google 上搜索过这个 但似乎无法弄清楚 我正在抓取给定 URL 页面的社交媒体链接 该函数返回一个包含 URL 列表的对象 当我尝试将此数据写入不同的文件时 它会输出到该文件 object Obj
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • java IO将一个文件复制到另一个文件

    我有两个 Java io File 对象 file1 和 file2 我想将 file1 的内容复制到 file2 有没有一种标准方法可以做到这一点 而无需我创建一个读取 file1 并写入 file2 的方法 不 没有内置方法可以做到这一
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 将记录转换为序列化表单数据以通过 HTTP 发送

    有没有办法转换此记录 TError record code Word message String end TState record caption String address Cardinal counters TArray
  • 如何将 TGifImage 中的帧提取为位图?

    下面的演示尝试在表单的画布上绘制 GIF 这不起作用 图像不会前进 如何让它发挥作用 procedure TForm1 FormCreate Sender TObject begin GIF TGIFImage Create GIF Loa
  • 从delphi应用程序调用.net4.0 com服务器后出现错误异常

    我们正在将代码库从 BDS2006 迁移到 Rad Studio XE 我们发现了一些非常奇怪的行为 如果我们在从 Net4 0 中实现的 COM 服务器创建一些对象后进行无效的浮点运算 即除以零 我们不会没有得到正常异常 即 EDivis

随机推荐

  • 在“无头模式”下运行虚拟操作系统意味着什么?

    我已经听到很多关于新版本的 VMWare Fusion 如何以 无头模式 运行虚拟操作系统的信息 谷歌搜索清楚地表明其他虚拟化产品也具有类似的功能 但是 我无法找到这实际上意味着什么的很好的描述 当你这样做时会发生什么 无头模式意味着虚拟机
  • PHP:删除任何扩展名的文件?

    当用户上传照片时 它会检查他们是否已经拥有一张照片 如果他们这样做 我希望它删除旧的 可以有任何扩展名 然后放入新的 有没有办法在不从数据库获取旧扩展的情况下做到这一点 目前的代码 del members gt prepare insert
  • 无法访问我的控制器/构造函数的输入

    我有一个简单的 Angular 2 组件 Input 我将其绑定到模板 模板显示输入数据 但我无法从构造函数访问它 import Component View bootstrap Input from angular2 angular2 i
  • 如何配置 IIS 以在 HTML5 模式下 URL 重写 AngularJS 应用程序?

    我有AngularJS 种子项目 https github com angular angular seed我已经添加了 locationProvider html5Mode true hashPrefix 到 app js 文件 我想配置
  • MSBuild 项目部署到本地文件夹并转换配置

    我在尝试找到正确的方法来使用 MSBuild 构建 Web 项目并输出仅包含可部署文件 即没有 cs csproj Debug config 等 但发布到本地文件夹的项目时遇到问题然后我可以通过 FTP RoboCopy 或其他方式 传输到
  • Haskell 错误:“非详尽模式”

    所以我有这个功能 当我尝试像这样使用它时 合并排序列表 1 1 1 1 它给了我一个错误 1 1 例外 SortFunctions hs 86 1 91 89 非详尽 函数 mergeSortedLists 中的模式 85 mergeSor
  • 如何向正在运行的 Linux 进程发送 Ctrl-Break?

    我正在调试在 Sun 的 JDK 1 4 2 18 上运行的应用程序中的内存泄漏 该版本似乎支持命令行参数 XX HeapDumpOnCtrlBreak 这可能会导致 JVM 在遇到控制中断时转储堆 如何将其发送到 Linux 机器上的后台
  • EnumChildWindows 还是 FindWindowEx?

    我可以选择使用 API EnumChildWindows 或 FindWindowEx 中的任何一个 有什么建议哪个 api 更注重性能 FindWindowEx 内部是否使用 EnumChildWindows 来获取特定窗口的句柄 这实际
  • 联合元素对齐

    如果我有一个联合 C 标准保证联合本身将与最大元素的大小对齐 union U long l int i short s char c 2 u 但对于工会内部各个工会成员的协调 它是怎么说的呢 下面的表达式能保证为真吗 u l u i u i
  • C++ STL 下一个排列与组合

    我知道我可以使用std next permutation在包含元素的某些容器上 1 2 3 这将生成该序列的 6 种排列 我想做的是给定一些设置 1 2 3 4 5 6 生成大小为 3 的所有可能的排列 因此对于这个例子 4 3 2 将是由
  • 如何在主活动中注册接收者? [复制]

    这个问题在这里已经有答案了 我有一个SmsReceiver我想在主活动中注册的类 我到底应该做什么 我是安卓新手 你可以做两件事 创建和定义BroadcastReceiver in the Manifest 创建并注册BroadcastRe
  • 获取 $_SERVER['AUTH_USER'] 的空白值

    我有一个在 Windows 2008 Server R2 上运行的 PHP 应用程序 它使用 PHP 的 LDAP 库根据 Active Directory 对用户进行身份验证 As per 这个答案 https stackoverflow
  • OCaml:如何运行包含库的脚本

    我正在按照 Real World OCaml 一书来学习 OCaml 许多程序都需要使用 Jane Street Core 库 当我在顶层使用这个核心库中的函数时 它工作得很好 在那里 我只需使用以下命令来打开 Core 库 use top
  • YouTube iframe 不响应 postMessage 命令

    我正在尝试使用来自父级的 postMessage 命令来控制 YouTube iframe 但它似乎不起作用 由于多种原因 我没有使用 YouTube API 只是使用带有 YouTube 嵌入视频的普通 iframe 我尝试发送命令的方式
  • monodevelop 2.1+ 支持 Visual Studio 2010 项目文件吗?

    monodevelop 2 1 是否支持 Visual Studio 2010 项目文件 但是 如果不支持 有人知道计划何时提供支持吗 我问的原因是我有一个在 VS2008 和 Monodevelop 中都使用的解决方案 当我在 2010
  • 为什么 reposync 没有签出我在清单文件中指定的分支?

    假设我有以下清单文件repo https source android com setup develop repo tool MCVE https stackoverflow com help minimal reproducible e
  • 如何通过父进程杀死子进程?

    我使用创建一个子进程fork 如果子进程无法在30秒内完成执行 父进程如何杀死子进程 我想让子进程最多执行 30 秒 如果超过30秒 父进程就会杀死它 你有想法这样做吗 向其发送 SIGTERM 或 SIGKILL http en wiki
  • Dropzone.js 和每个文件的完整路径

    我正在尝试使用 Dropzone js 重新创建删除的文件 文件夹的文件夹结构 有没有办法访问每个文件的完整路径 以便可以在 php 端重新创建目录结构 这是一种简单的方法 您可以额外发送某些文件夹中所有文件的完整路径 dropzone o
  • Xgboost:bst.best_score、bst.best_iteration 和 bst.best_ntree_limit 有什么区别?

    当我使用 xgboost 训练我的数据时2 cates classification problem 我想使用提前停止来获得最佳模型 但我对在预测中使用哪一个模型感到困惑 因为提前停止将返回 3 个不同的选择 例如 我应该使用 preds
  • 读写文本文件的最佳方法

    我正在使用最新版本的 Lazarus IDE 并且我有一个Memo1在我的 TForm1 上 我必须加载一个文本文件Memo1然后编辑备忘录的每一行 我使用Memo1 Lines Strings i 最后 我必须将编辑后的备忘录保存在特定路