如何删除文本文件的最后两行?

ictest0510 2016-10-05 03:10:25




图片说明: 图1是一个文本文件,用UltraEdit查看,显示共有562行。
图2是这个文本文件经程序处理后想达到的结果,用UltraEdit查看,显示共有560行 (删除最后两行)。

程序中想要达到的效果:查找文件中是否含有“TOTAL PASS”行,如有,MsgBox "已找到",删除该行及以下所有行,用UltraEdit查看,剩有560行(其实就是满足产找条件后,只删除最后两行,一行是含有“TOTAL PASS”行,一行是空行。);如没有,MsgBox "没找到",没有其他操作。

现状: 1、“查找文件中是否含有“TOTAL PASS”行”语句不会写,
2、自己写的删除语句的确是把含有“TOTAL PASS”行删掉了,但是同时把文本中所有空行都删掉了,文件最后还剩两个空行,整个文件内部的格式给改变了。

自己写的删除语句如下:
Dim i As Long, s As String
i = FreeFile
Open (Dir1.Path & "\" & File1.FileName) For Input As #i
s = StrConv(InputB(LOF(i), i), vbUnicode)
Close #i
i = FreeFile
Open (Dir1.Path & "\" & File1.FileName) For Output As #i
Print #i, Replace(Replace(s, "TOTAL PASS", ""), vbCrLf & vbCrLf, vbCrLf)
Close #i


请各位帮忙 1、“查找文件中是否含有“TOTAL PASS”行”语句怎么写?
2、删除语句有什么错误?
3、第一条和第二条如何进行功能合并?
...全文
708 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ictest0510 2016-10-06
  • 打赏
  • 举报
回复
非常感谢 Chen8013 舉杯邀明月 大神的回复! 您的详细的回复向我传授了很多有用的知识,可以看出您是真心无私的、毫无保留的想要帮助一个新手,再次非常感谢! 认真拜读了您的回复,并且我在网络中再次寻找,终想于找到一段源码,经过修改并试用后,能够达到我的使用要求,现把它贴上来,一是向Chen8013 舉杯邀明月 大神做一个汇报,二来希望能帮助一些有我同样或类似要求的朋友。 Private Sub Command1_Click() Dim i As Long, s As String i = FreeFile Open "c:\A121NA_S05601_40_1.dat" For Input As #i s = StrConv(InputB(LOF(i), i), vbUnicode) Close #i If InStr(1, s, "TOTAL PASS") = 0 Then MsgBox "没找到" Else MsgBox "找到了" F "c:\A121NA_S05601_40_1.dat" MsgBox "删除了" End If End Sub Sub F(ByVal Path As String) On Error GoTo eHandler: Dim Fc As String, Fn() As String, i As Integer Open Path For Binary As #1 Fc = Space(LOF(1)) Get #1, , Fc Close #1 Fn = Split(Fc, vbCrLf) Do Until Fn(UBound(Fn)) <> "" '删除了最后一行不为空的行——也就是删掉一行有数据的行 ReDim Preserve Fn(UBound(Fn) - 1) DoEvents Loop Do Until Fn(UBound(Fn)) = "" '删除了最后一行为空的行——也就是删掉一行空行 ReDim Preserve Fn(UBound(Fn) - 1) DoEvents Loop If UBound(Fn) <= 0 Then Open Path For Output As #1 Print vbNullString Close #1 Else ReDim Preserve Fn(UBound(Fn) - 1) Open Path For Output As #1 For i = 0 To UBound(Fn) Print #1, Fn(i) Next Close #1 End If Exit Sub eHandler: MsgBox "Error # " & Err.Number & " was generated by " & Err.Source & Chr(13) & Err.Description, vbCritical, "Error", Err.HelpFile, Err.HelpContext Err.Clear End Sub
舉杯邀明月 2016-10-05
  • 打赏
  • 举报
回复
引用 楼主 ictest0510 的回复:
.............. 请各位帮忙 1、“查找文件中是否含有“TOTAL PASS”行”语句怎么写? 2、删除语句有什么错误? 3、第一条和第二条如何进行功能合并?
1. 既然你打开文件、读取数据之后,用了:   s = StrConv(InputB(LOF(i), i), vbUnicode)   那么你就用Instr() 函数来判断就行了:    instr(1,s, “TOTAL PASS”)的返回值,   如果为0表示没有这个字符内容;   如果为某正整数,则表示读取到的内容中,至少有一个“TOTAL PASS”在文件内容中。 2. 你的“删除操作”,是把连续的两个“回车+换行”替换成一个。   从你的代码中,配合你的“操作1.”,看起来是“没有错”,但你可能忽略了一个问题:   “纯文本”的换行方式有两种:一种是“回车+换行”分界的;一种是“仅以换行符”分界的。   其中,前一种是VB6支持的,后一种则VB6是“不识别的”,这种情况下VB6不会认为文本是‘多行’。   如果你处理的那个文件,正好是这种换行方式,那么你的“删除空行”的操作就无效。   要识别是哪种换行方式也很简单,你打开“记事本”,把这个文件拖到记事本的窗口中,   如果“显示效果”跟你用UE打开的一样,那么这种文本文档是“回车+换行”分界的;    如果“应该换行的地方没有换行显示”,那么它就是以“换行符”分界的。   其实以你的“删除操作无效”来看,也可以知道你这个文件是后一种换行方式了。 3. 其实也很简单,既然你读取文件,然后把文件内容转换成“字符串”了,   那么,定义一个Long类型变量,比如是 n ,在你“转换文件内容”之后:   n = instr(1,s, “TOTAL PASS”)   如果n为0,则不处理;   否则,n是正整数值,是找到了"TOTAL PASS"的,只要:   s = left$(s, n-1)   就可以把你想要删除的“末尾内容”删除掉了,   然后把这个s的新值输出到文件中,就是你想要的处理结果了。
用于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.

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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