搜索
查看: 4565|回复: 4

分享如何删除文件最后一行 - 我的一次解决问题的经历

[复制链接]

47

主题

178

帖子

1166

积分

荣誉会员

Rank: 8Rank: 8

积分
1166
发表于 2012-9-20 17:20:13 | 显示全部楼层 |阅读模式
本帖最后由 wznjsy 于 2012-9-20 17:32 编辑

需要删除文件的最后一行,但是看库文件貌似没有找到这个功能,搜索了下,貌似也没有这样的帖子。开始动脑子。。。

在想:能不能这么操作?逐行读取文件后,把最后1行给去掉,再把其他行给保存到原来的位置?
逐行读取的代码是:
for line in io.lines(path) {
    io.print(line);
}
去除最后一个 貌似用Table 好搞一点,于是想起了用pop ,这样可以把最后一行给POP 出来。这样剩下的就是我需要的内容。
但是因为这个时候我得到的是数组,保存的话,还得一行一个去保存,这样的话 用for 循环去遍历好一点。换行用'\r\n' 就可以了。

现在又有一个问题了,如何保存到原来的文件中去?得先清空,然后再1行1行的追加。清空其实很简单,给他保存一个空的字符串就可以了。比如。string.save(path, "")
下面把剩下的这些数据挨个追加进去就OK了。

下面把代码贴出来。(要正确运行这个代码需要在D盘的更目录下面有一个title.txt 文件,文件里面最好3行以上的内容。)


import fsys;
io.open()
path =
"d:\\title.txt"  
tabTitle={};
for line in io.lines(path) {
    table.push(tabTitle,line);
}
io.print(
"原文件内容");
for(k,v in tabTitle){
    io.print(v);
}
lastone = table.pop(tabTitle);//弹出最后一行

io.print("最后一行是",lastone,"好吧,一会把你删掉");
string.save(path,
"") //清空原来的文件

io.print("新的文件内容");
for(k,v in tabTitle){
    str = v +
'\r\n';

    string.save(path, str ,true)//追加字符串到这个文件
    io.print(v);
}
execute("pause") //按任意键继续
io.close();//关闭控制台



现在想想其实这个功能也没有什么太复杂的地方。就是将几个自己知道的知识进行组合,也能解决。这个方法也许不是最好的,欢迎大家批评指正。



点评

同意: 3.0
同意: 3
让我想,我也是最先想出这样的套路  发表于 2013-1-28 22:28

评分

参与人数 1银币 +50 收起 理由
coder + 50 赞一个!

查看全部评分

回复

使用道具 举报

75

主题

849

帖子

5002

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
5002
发表于 2012-9-20 23:19:30 | 显示全部楼层

感谢分享解决过程; 看看模式匹配更简单; [quote][align=left][font=新宋体][color=#0000ff]var[/color][c

感谢分享解决过程;
看看模式匹配更简单;
var path = "d:\title.txt";
var str=string.load(path);
var p='([^\r\n]+?\r\n)$';
str=string.replace(str,p,
"");
string.save(path,str );

点评

同意: 5.0 真棒: 5.0
同意: 5 真棒: 5
你的模式匹配用的出神入化啊。  发表于 2012-9-20 23:35
小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

33

主题

543

帖子

3304

积分

荣誉会员

Rank: 8Rank: 8

积分
3304
发表于 2012-9-21 22:32:18 | 显示全部楼层

这样效率会高些,不需要全部读入、处理完后再写出,适合于较大的文件: [quote][align=left][font=新宋体][size=2][color=#

这样效率会高些,不需要全部读入、处理完后再写出,适合于较大的文件:
import fsys.file;

var file = fsys.file("C:\1.txt", "a+");
io.open(file.handle).readback();
file.seteof();
file.close();


点评

真棒: 5.0
真棒: 5
彪悍。  发表于 2012-9-22 16:37
回复

使用道具 举报

5

主题

129

帖子

1397

积分

四级会员

Rank: 6Rank: 6

积分
1397
发表于 2012-9-24 15:53:39 | 显示全部楼层

lujjjh 这个例子很实用 请问如果删除文件第一行 又如何做呢 下面这个函数是论坛搜索的 不过要全部读入 保存 [align=left][font=新

lujjjh 这个例子很实用 请问如果删除文件第一行 又如何做呢

下面这个函数是论坛搜索的 不过要全部读入 保存
deleteLine = function(path){
   
var f = io.open( path ,"rb"  );
    f.read()
//跳过第一行
    var str = f.read(-1)  //读取全部数据
    f.close();
    string.save(path,str )
//保存到文件
}
deleteLine(
"C:\1.txt")
回复

使用道具 举报

2

主题

36

帖子

307

积分

二级会员

Rank: 3Rank: 3

积分
307
发表于 2014-8-26 06:03:06 | 显示全部楼层

{:victory:}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-21 03:44 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表