主题:还是老问题,关于文本内容的,请MOZ赐教!
chengjun
[专家分:0] 发布于 2005-07-09 02:47:00
MOZ:
以下是您给我写的关于在一个文本中每一行的最后都加"*"的代码:
defint a-z
f$="文件名"
f=freefile
cr$=chr$(13)+chr$(10)
open f$ for binary as #f
a$=input$(16383,#f)
i=instr(1,a$,cr$)
do while i
mid$(a$,i)="*"+mid$(a$,i)
i=instr(i+2,a$,cr$)
loop
put #1,1,a$
close
==================================================================
又出问题了,我在实验的时候是在DOS622下运行: dir /s c:\ >temp.txt
再利用以上这个程序在temp.txt的中的每行末尾加入"*"
一切顺利!
我实际是要在win98dos下(也就是dos7.0)下运行:dir /s c:\ >temp.txt
再利用以上这个程序在temp.txt的中的每行末尾加入"*"
就出现了问题!!!
因为dos622和dos70运行dir,显示信息有所不同.
还有,为什么在dir /s c:\ >temp.txt获取来的temp.txt中的最后一行
不能加入"*"
经过实验只要在DOS71中建立的temp.txt的最后一行删除就可以了
可不可以修改以上的代码,加入删除文本的最后一行,或另写一个在一个
文本中删除最后一行的程序?我想这样解决以上的问题!
谢谢!
回复列表 (共9个回复)
沙发
chengjun [专家分:0] 发布于 2005-07-08 15:05:00
还有个办法
以下是一个获取一个文本的全部内容的代码:
open "文件.txt"for input as #1
for i=1 to 20
line input #1,a$
b$=b$+a$
next
close #1
?b$
只要把他改成获取文本中每行末尾带"*"的全部内容
(如果有有几行的末尾不带"*"的就不获取)
请高手帮帮我好吗? 谢谢!
板凳
moz [专家分:37620] 发布于 2005-07-09 01:02:00
哈哈,我怎么变成zom了?
哈哈哈哈,是最后一行丢失掉了对吧?
那就改一改吧,因为mid$是不能改变字符长度的,
假设:你的文件小于10K
defint a-z
f$="文件名"
f=freefile
cr$=chr$(13)+chr$(10)
open f$ for binary as #f
if lof(f)>15000 then system
a$=input$(16383,#f)
if len(a$)<15000 then a$=a$+space$(1000)
i=instr(1,a$,cr$)
do while i
mid$(a$,i)="*"+mid$(a$,i)
i=instr(i+2,a$,cr$)
loop
a$=rtrim$(a$)
put #1,1,a$
close
当然,因为你只是要加一个"*"那么少,其实可以更简单,哈哈,不过不要乱试:
把回车符改成"*",换行符不变就行了,哈哈
defint a-z
f$="文件名"
f=freefile
cr$=chr$(13)
open f$ for binary as #f
do until eof(f)
fl=seek(f)
a$=input$(16383,#f)
i=instr(1,a$,cr$)
do while i
mid$(a$,i,1)="*"
i=instr(i+,a$,cr$)
loop
put #1,fl,a$
close
获取文本中每行末尾带"*"的全部内容
open "文件.txt"for input as #1
do until eof(1)
line input #1,a$
if right$(a$,1)="*" then
print a$
b$=b$+a$
endif
next
close #1
print b$
3 楼
chengjun [专家分:0] 发布于 2005-07-10 13:24:00
对不起!MOZ老师.把你的名字写错了.
谢谢你的多 次帮助,我的问题已经解决了!(我是采用第一个程序)
第二个和第三个代码有点问题.
第二个代码:
defint a-z
f$="文件名"
f=freefile
cr$=chr$(13)
open f$ for binary as #f
do until eof(f)
fl=seek(f)
a$=input$(16383,#f)
i=instr(1,a$,cr$)
do while i
mid$(a$,i,1)="*"
i=instr(i+[color=FF0000],[/color]a$,cr$)
loop
put #1,fl,a$
close
红色的是提示错误的地方,错误提示为:Expected:expression
第三代码:
获取文本中每行末尾带"*"的全部内容
open "文件.txt"for input as #1
do until eof(1)
line input #1,a$
if right$(a$,1)="*" then
print a$
b$=b$+a$
endif
[color=FF0000]next[/color]
close #1
print b$
红色的为提示错误的地方.
提示为:NEXT without FOR
4 楼
def [专家分:3380] 发布于 2005-07-10 14:53:00
第二:
defint a-z
f$="文件名"
f=freefile
cr$=chr$(13)
open f$ for binary as #f
do until eof(f)
fl=seek(f)
a$=input$(16383,#f)
i=instr(1,a$,cr$)
do while i
mid$(a$,i,1)="*"
i=instr(i,a$,cr$)
loop
put #1,fl,a$
close
第三:
open "文件.txt"for input as #1
do until eof(1)
line input #1,a$
if right$(a$,1)="*" then
print a$
b$=b$+a$
endif
loop
close #1
print b$
5 楼
moz [专家分:37620] 发布于 2005-07-11 01:18:00
呵呵,不好意思,老眼昏花,误人子弟,罪孽深重
def改对了后面一个
我是写错了next,那是把for改成do的时候忘了改的,
把next改成loop就可以了.
第二个问题我看不到红色的,但应该是def改的这一句
不过改得不太对,应该是这样子才是对的,否则运行不下去的.
i=instr([color=FF00FF]i+1[/color],a$,cr$)
6 楼
chengjun [专家分:0] 发布于 2005-07-12 01:03:00
哈哈,你们两位老师改的都错了!
先说第二部分的代码
如果改成:
i=instr([color=FF00FF]i+1[/color],a$,cr$)
提示:[color=00FF00]do[/color] until eof(f)(绿色的为提示错误)
提示为:DO WITHOUT LOOP
======================================
如果按def的方法改也同样提示:
提示:[color=00FF00]do[/color] until eof(f)(绿色的为提示错误)
提示为:DO WITHOUT LOOP
--------------------------------------
第三部分:
如果NEXT还是提示错误,提示NEXT有问题.
提示为:next without FOR
7 楼
moz [专家分:37620] 发布于 2005-07-12 11:03:00
我是说
把
[size=6]next[/size]
改成
[size=6]loop[/size]
8 楼
zqnhlm [专家分:780] 发布于 2005-07-14 10:49:00
夸张!
9 楼
def [专家分:3380] 发布于 2005-08-16 04:53:00
[size=5]没文化就不要乱说![/size]
我来回复