主题:如何在文本中删除最后4行? 刚来这里请大家帮个忙,谢谢!
lijingbo2
[专家分:0] 发布于 2005-07-16 15:16:00
譬如有个文本,*.TXT,文本里有许多行文字,怎么删除这个文本里的最后4行文字?
回复列表 (共12个回复)
沙发
莫非白 [专家分:750] 发布于 2005-07-16 17:52:00
在WINDOWS 下打开文件,用鼠标把最后4行弄成反白(选定)最后按一下DELETE(删除)键盘就一切OK 了,嘿嘿~~~[em12]
板凳
lijingbo2 [专家分:0] 发布于 2005-07-16 22:13:00
在WINDOWS下,我当然会了,我要 QBasic的制作个程序,只要在DOS下运行这个程序,就
自动删除了*.TXT文件里的最后4行.
谁能帮我吗,这该怎么写?
3 楼
moz [专家分:37620] 发布于 2005-07-16 23:59:00
将最后四行换行空格比较方便一点.
删除也可以,但最好是新建一个文件.
open "文件.TXT" for binary as #1
l&=lof(1)
do until k>4 or l&<2
l&=l&-1
seek #1,l&
if input$(2,1)=chr$(13)+chr$(10) then k=k+1
loop
w$=space$(lof(1)-l&+1)
put #1,l&,w$
close
4 楼
lijingbo2 [专家分:0] 发布于 2005-07-17 01:50:00
谢谢你的帮助!
我遇到个问题:
我的*.TXT文本里的每行末尾有这个"[size=3]`[/size]"符号,一运行
你上面写的程序,*.TXT文件里的内容全没了!如果我在文本里每一行的"[size=3]`[/size]"删除这个符号那就正常了,可是这个符号他是某一个程序自动生成的,
"[size=3]`[/size]"这个符号也是必须要的,我只是不要最后4行,看来有冲突,
有什么办法解决吗?
另外,经过这个程序处理后(也就是删除最后4行后),光标的位置正好在最后一行的
下面空白行的位子,有没有办法让光标到到下面的空行去,就像敲几下回车键一样光标就到下面的空白行去了.
请问,这2个问题能不能在这个程序中一起解决,如果不能解决分2个程序也可以.(我看还是分2个程序好了)
谢谢!
5 楼
moz [专家分:37620] 发布于 2005-07-17 14:59:00
哈哈哈哈,
我听不明白,
我不会处理光标的,呵呵.
不过我可以跟你说说文件的内容,希望别把你菜晕了.
.TXT文件一般用来储存文本内容
(当然,你把EXE改名成TXT也不会有人有意见的)
也就是ASCII码中的字母数字和标点符号(一般不包含控制码)
文件中你觉得内容以一行行的形式保存的话,
那每一行后面会在有效字符内容的最后加一个回车换行符以结束那一行的
文件结尾一般也会加一个文件结束符的
你用EDIT用二进制方式打开文件就可以看得到的了
举例:
文件.TXT
--------------------------------
ABC/
123/
*
--------------------------------
因为那些字符没办法表示
我就用/来表示回车换行符:chr$(13)+chr$(10)
*表示文件结束符chr$(26)
但因为文件分配表的原因,
这个文件结束符不一定能起作用
你要删除最后四行,
首先就要找到最后的四个回车换行符
并且把这四个回车换行符前面的内容处理掉
至于你说的光标的位置......??????
(嘻嘻,屏幕才会有光标的,文件里面哪会有光标?
只有文件当前位置,用seek语句)
如果仅仅是删除后四行的话,而且你的TXT文件格式没问题的话,
以备份文件的方式删会比较好比较快.
f$="文件.TXT"
fbak$="1~"+f$
dels=4
dels=dels
dim s$(dels)
open fbak$ for output as #1
close #1
kill fbak$
name f$ as fbak$
open f$ for output as #1
open fbak$ for input as #2
for i=1 to dels
if not eof(2) then line input #2,s$(i) else exit for
next
do until eof(2)
j=j+1
if j>dels then j=1
print #1,s$(j)
line input #2,s$(j)
loop
close
6 楼
莫非白 [专家分:750] 发布于 2005-07-17 19:13:00
我是搞笑的拉[em1]
7 楼
lijingbo2 [专家分:0] 发布于 2005-07-17 20:37:00
至于你说的光标的位置......??????
(嘻嘻,屏幕才会有光标的,文件里面哪会有光标?
只有文件当前位置,用seek语句)
我的意思是:
假如第一个*.TXT的文本内容为:
================================================
SSSSSSSSSSSSSSSSSS/
FDFFFFFFFFFFFFFFFFFF/
FFFFFFFFFFFFFFFFFFFF/
/
=============================================
第二个*.TXT的文本内容为:
=============================================
SSSSSSSSSSSSSSSSSS/
FDFFFFFFFFFFFFFFFFFF/
FFFFFFFFFFFFFFFFFFFF/
/
/
/
==============================================
第一个文本和第2个文本的区别:(在第1个文本和第2个文本下面多了2个"/"的符号假设"/"符号的表示为回车符号,在WINDOWS下打开*.TXT其实是看不见"/"这个符号)
第一个文本只有一个回车符号,按住键盘上下键的下键,光标只能向下移到最后一个回车符的位子.
第二个文本只有三个回车符号,按住键盘上下键的下键,光标可以向下移到第三个回车符的位子.
总的一句话,如何在第一个文本的末尾行插入2行空白行
请问这个程序能写吗?谢谢!
8 楼
moz [专家分:37620] 发布于 2005-07-17 21:15:00
插入空白行?
呵呵 太简单了.
open "文件.txt" for append as #1
print #1,
print #1,
close
9 楼
lijingbo2 [专家分:0] 发布于 2005-07-17 22:58:00
谢谢问题已解决!
能不能再问你个问题?(我是不是很烦啊!)
有2个文本,分别为A.TXT和B.TXT
如何讲A.TXT里的1到10行内容插入到B.TXT第3行下面去?
10 楼
moz [专家分:37620] 发布于 2005-07-17 23:46:00
如果B.TXT文件只有3行那就好办了,如果不止的话就有点麻烦了,
这些情况还是新建文件比较方便.
a$="a.txt"
b$="b.txt"
bbak$="1~"+b$
open bbak$ for output as #1
close #1
kill bbak$
name b$ as bbak$
open bbak$ for input as #1
open a$ for input as #2
open b$ for output as #3
for i=1 to 3
if not eof(1) then
line input #1,w$
print #3,w$
endif
next
for i=1 to 10
if not eof(2) then
line input #2,w$
print #3,w$
endif
next
do until eof(1)
line input #1,w$
print #3,w$
loop
close
我来回复