关于文本文件的查找和删除行问题

cwwa 2006-04-02 05:13:36
如C:\a.txt
格式如下
[xxx]
yyy=123 0000044444
yyy=456 1111101
yyy=789 212220000

[xxx]
yyy=123 11111
yyy=345 1001000
yyy=3567 88776
yyy=23354 999999978

[xxx]
.....

大致格式如上,如果想查找yyy=123找到后将包含该关键字的整行删除并保存,应该怎么做呢????
查找的内容可能在文中出现多次!
谢谢各位了,分不够可以再加的.
文本会很大,约50M左右,如果能解决怎么能让效率更高一些?
...全文
470 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellolongbin 2006-04-06
  • 打赏
  • 举报
回复
还有,怎么匹配查找的字符串?
如果
yyy=123 xxxxx
yyy=1234 xxxxxxxxxx
我只想删除yyy=123 怎么办????
-------------------
用 AnsiStartsText('yyy=123 ',s) 判断

123后面有个空格
hellolongbin 2006-04-06
  • 打赏
  • 举报
回复
多了还是少了?

创建一个内容全是
[xxx]
yyy=123 0000044444
yyy=456 1111101
yyy=789 212220000
的文本,循环一百万次,大约是61M多,然后再用我的上面的代码跑,我当时读取了跑之前和完成之后的时间,我512内存大约是二十五六秒
coreblood 2006-04-05
  • 打赏
  • 举报
回复
要效率啊 。。。。。
todouwang 2006-04-05
  • 打赏
  • 举报
回复
你查下windows中那个查找所对应的api
clasj 2006-04-05
  • 打赏
  • 举报
回复
60M?
20几秒?

怀疑中。。。
hellolongbin 2006-04-05
  • 打赏
  • 举报
回复
对于超过10M以上的文件来说,就不再推荐用loadfromfile之类的方法了,因为确实是太占用内存了,小文件还可以
hellolongbin 2006-04-05
  • 打赏
  • 举报
回复
其实,对于不是几百M或者更大的超大文件,而且对效率要求也不是很高的话,没有必要用KMP之类的算法来把自己的程序弄的那么复杂,用普通的assignfile来处理就足够了

我做了一个测试,一个60M左右的文本文件,用下面的代码跑,花费的时间也不过20几秒,相信这个结果在工作中你应该可以接受了吧
procedure TForm1.Button1Click(Sender: TObject);
var
F1,F2: TextFile;
s:string;
begin
AssignFile(F1, 'E:\1.txt');
AssignFile(F2, 'E:\2.txt');
Reset(F1);
ReWrite(F2);
while not eof(f1) do
begin
Readln(f1,s);
if not AnsiStartsText('yyy=123',s) then Writeln(F2, s);
end;
CloseFile(F1);
CloseFile(F2);
ShowMessage('ok');
end;

如果单纯为了效率而的效率,或者为了讨论算法,那么去看看kmp之类的相关资料吧
cwwa 2006-04-04
  • 打赏
  • 举报
回复
楼上的大哥,你的代码倒是可以运行,也没有问题,但在大文件里,,,,,,,,,我的电脑已经死机了...
readln是不行的.....

还有,怎么匹配查找的字符串?
如果
yyy=123 xxxxx
yyy=1234 xxxxxxxxxx
我只想删除yyy=123 怎么办????
clasj 2006-04-04
  • 打赏
  • 举报
回复
所以说是“砖”了。。。

if Pos('yyy=123 ', Strings[n])>0 then

Copy(Strings[n], Length('yyy=123 ')+1, Length(Strings[n])-Length('yyy=123 '));
clasj 2006-04-02
  • 打赏
  • 举报
回复
抛砖引玉:)

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes, Windows;

var
Strings: TStrings;
i: integer;
n: integer;
k: Cardinal;
begin
Strings:=TStringList.Create;
try
k:=GetTickCount;
Strings.LoadFromFile('a.txt');
n:=0;
for i:=0 to Strings.Count-1 do
if Pos('yyy=123', Strings[n])>0 then
Strings.Delete(n)
else
Inc(n);
Strings.SaveToFile('b.txt');
WriteLn(GetTickCount-k);
finally
Strings.Free;
end;
ReadLn;
end.
cuteant 2006-04-02
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4409/4409271.xml?temp=.81625
用于windows下面的vim编辑器。 给喜欢vim的人使用。详细如下: 好吧,详细点,这里写出一些基本的命令: 【什么是vi】 vi就是linux命令下的最著名的编辑器之一,(编辑器就是类似windows记事本的功能,不过vi功能比记事本强大无限倍!^_^),现在实际使用的都是vim,它是vi的改进版本,所以现在的vi基本上就是vim了。 【vi能做什么】 第一个功能不用多说,vi可以编辑文本文件。至于其他的功能,多得无法列举,我只说我所知的一些典型的功能应用: (1)编辑文本文件 (2)方便地阅读程序源代码 (3)当文件目录浏览器来用 (4)提供编程、调试环境 (5)利用vi执一些脚本文件(vi有自己的脚本文件语法) (x)等等等等...... 【vi的操作模式】   vi具有两种基本模式,为输入模式(或插入模式、编辑模式)和指令模式(或命令模式)。输入模式下输入字符,文本就会显示在屏幕上;而指令模式下输入字符就解释为一个输入命令并执,而不会显示相应的字符。理解指令模式最简单方式就是想象平时剪切、复制以及粘贴数据时所发生的情况。 使用[Esc]键可以停止当前操作(插入或者命令)重新回到指令模式,准备接受新的指令。如果本来就在指令模式下面,将会响铃一下。 【最基本的使用】 这里提供了使用vi得最基本的操作,能够实现大多数的编辑目的。如果你肯花几分钟把“最基本的使用”的内容都实践一下,那么你至少可以独立地在vim中朝你想要得方向“前进”了。如果你不想学习,那么就把它当作一个“字典”吧。 *用vi打开一个文件: 输入“vi filename”. 这里,filename就是你要打开的文件的名字,默认打开文件后vi处于指令模式。 *进入编辑模式编辑打开的文件: 输入“i”. 或输入“a”. 进入编辑模式后,你可以直接敲入想要输入的字符到文件,两者的区别是i在当前字符前面开始插入,a在当前字符后面开始插入。 *退出编辑模式: 输入“[Esc]”. 这样,将返回指令模式,准备接收你要传达给vi的指令并执,如果之前已经在指令模式下,那么系统将响铃提醒一下。 **以下命令都是在命令模式下进: *撤销修改: 输入“u”. 这里,相比以前的vi来说,vim支持多步撤销。 *恢复修改: 输入“[Ctrl]r”. 这里,和撤销命令相反,是撤销的撤销,也可多步。 *复制到剪切板: 输入“yy”. *复制选定内容到剪切板: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“y”。 这里,开始输入v使vi临时进入了一个"选择模式",输入方向键可以选择,输入y将选择的内容复制剪切板。 *删除: 输入“dd”. 注意,vi的删除等价于剪切,删除的内容会保存到剪切板中。 *删除选定内容: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“d”。 这里,开始输入v使vi临时进入了一个“选择模式”,输入方向键可以选择,输入d将选择的内容删除。 *粘贴: 输入“p”. 这样会将剪切板的内容粘贴到光标位置或者光标下一。 *查找字符并定位到第一个匹配处: 输入“/character”. 这里character是待查找的字符,只要先输入/,再输入待查字符,最后回车即可定位到第一个匹配的字符处。 *定位到匹配查找的下一个字符处: 输入“n”. *定位到匹配查找的上一个字符处: 输入“N”. *保存文件: 输入“:w”. 注意w前面的':',输入':'之后,vim会将':'之后的输入解释为待执的指令。 *退出: 输入“:q”. 这里,如果文件没有保存,将提示无法退出,除非你强制退出,不保存文件,或者保存退出。 *强制退出: 输入“:q!”. *保存退出: 输入“:wq”. 或输入“ZZ”. *察看帮助 输入":help". ** 另外还有一个简易的教程: 输入命令:vimtutor.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧