免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9959 | 回复: 10
打印 上一主题 下一主题

求助:如何删除文件中的一行记录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-26 21:04 |只看该作者 |倒序浏览
比如我有一个文件:records.txt
里面有记录:

  1. wells        23        male        提交       
  2. monk        21        male        提交       
  3. sherry        22        female        提交       
  4. chihao        22        secret        提交       
  5. alien        25        male        提交       
  6. sky        20        secret        提交       
复制代码


如何才能删除其中的一行
比如: sky  20  secret  提交

论坛徽章:
0
2 [报告]
发表于 2006-07-26 21:12 |只看该作者
原帖由 wellshunan 于 2006-7-26 21:04 发表
比如我有一个文件:records.txt
里面有记录:


  1. wells        23        male       
  2. monk        21        male       
  3. sherry        22        female       
  4. chihao        22        secret       
  5. alien        25        male       
  6. sky        20        secret       
复制代码


如何 ...

simply type:
perl -ne 'print if ! /^sky/' records.txt

论坛徽章:
0
3 [报告]
发表于 2006-07-26 22:09 |只看该作者

回复 1楼 wellshunan 的帖子

我曾经写过,采用的方法是将原来的文件改个名,然后将文件读出,如果不为特定的记录就写入新文件.比较笨啦

论坛徽章:
0
4 [报告]
发表于 2006-07-26 23:24 |只看该作者
原帖由 daafu 于 2006-7-26 22:09 发表
我曾经写过,采用的方法是将原来的文件改个名,然后将文件读出,如果不为特定的记录就写入新文件.比较笨啦

You are right?!
Why so many stupid programmer write many code to remove only one line in a file?!
Why not like you, just open file , delete such a line and save it again?!
zic, zac in second the work is finished !?
cool !!!!

论坛徽章:
0
5 [报告]
发表于 2006-07-27 08:39 |只看该作者
通常的做法是,把文件读取放到数组或其他的存储方式。查询到要删除的行,然后修改数组。最后将数组的数据写回文件。

论坛徽章:
0
6 [报告]
发表于 2006-07-27 15:29 |只看该作者
原帖由 ulmer 于 2006-7-26 21:12 发表

simply type:
perl -ne 'print if ! /^sky/' records.txt
  1. perl -i -ne 'print if ! /^sky/' records.txt
复制代码

论坛徽章:
0
7 [报告]
发表于 2006-08-02 13:51 |只看该作者
通常的做法是,把文件读取放到数组或其他的存储方式。查询到要删除的行,然后修改数组。最后将数组的数据写回文件。


如果你删除了数组中的一个元素,那么往文件中写入的时候就无法将原来的数据全部覆盖了
是否先将原文件清空?
还是先把原文件rename 然后再写入与原文件同名的文件中?


Best!

论坛徽章:
0
8 [报告]
发表于 2006-08-02 14:37 |只看该作者

回复 1楼 wellshunan 的帖子

其实一样的.楼上的楼上意思是读入到数组:
@lines = <FILE>;
while ($line = pop @lines) {
    # do something with $line
}
然后再将原来的文件覆盖.

或者将原来的文件改名称;rename($Serched_name_File,$tempFileName);
然后将更改后的内容写入和原来的文件同名的文件.最后ulink改名的文件.

论坛徽章:
0
9 [报告]
发表于 2006-08-02 14:55 |只看该作者
@lines = <FILE>;
while ($line = pop @lines) {
    # do something with $line
}
然后再将原来的文件覆盖.

比如原文件有10行,删除一行后剩9行了,如果去覆盖原文件的话
将有一行的信息是未知的。不知道是不是我考虑不周全,麻烦了!

论坛徽章:
0
10 [报告]
发表于 2006-08-03 15:08 |只看该作者

回复 1楼 wellshunan 的帖子

不是的.确             open(OUT_File, "<$FileName") || die;
                   @lines = <OUT_File>;
这时原来文件所有的内容都在数组中了.可处理这个数组.然后把这个数组写到一个新文件,或覆盖写到原来的文件都可以了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP