主题:给大家出一个题
staa
[专家分:3690] 发布于 2005-04-09 00:13:00
还是在这里给大家出一个题吧(在45兄的帖子里面出不太合适):
当前目录里有一大堆001.mp3、002.mp3之类的文件,另外还有一个文本文件,里面是文件名与歌名的对照,一行一个,中间用若干个空格分开。现在要求编一个程序,把所有的.mp3的主文件名改为歌名。
(这个题还是有些难度的哦)
回复列表 (共11个回复)
沙发
codepk [专家分:2800] 发布于 2005-04-09 09:47:00
算法:
1:打开文件
2:读出文件名和歌名
3:歌名=歌名+".mp3"
4.shell "ren "+文件名+" "+歌名
5.重复2.3.4步的操作,直至文件结束
板凳
lss [专家分:10] 发布于 2005-04-09 10:57:00
我不会,你能教我吗?
3 楼
staa [专家分:3690] 发布于 2005-05-06 16:11:00
看谁能按codepk在1楼的算法写出代码?
4 楼
qb45 [专家分:2880] 发布于 2005-05-06 16:31:00
4.shell "ren "+文件名+" "+歌名
在这个会卡住
在程序里只能调用REN一次
5 楼
staa [专家分:3690] 发布于 2005-05-07 23:15:00
楼上的说法有点出乎意外。我觉得不会是只能调用一次吧?
6 楼
moz [专家分:37620] 发布于 2005-05-08 00:25:00
'深夜难眠,献献丑。
'默认在当前目录,否则请加一句chkdir "什么目录"
'文本文件里的格式最好小心一点,嘻嘻
defint a-z
f=freefile
open "歌名对照.txt"for input as #f
'这个不用我说明吧,改一改文件名就行了
do
line input #f,i$
i$=rtrim$(ltrim$(i$))
if i$<>"" then
s=instr(1,i$,chr$(32))
if s<1 then exit do
'这些if嘛随便你要不要,只要你能确认文件格式没问题就好了。如果不能确认的话还可以加更多的检查语句,比如检查第一个文件的扩展名是不是mp3之类的
n1$=left$(i$,s-1)
n2$=ltrim$(mid$(i$,s))+".mp3"
'有必要的话再检查一下这两个文件名的有效性
name n1$ as n2$
'最好加多一个错误处理例程
endif
loop until eof(f)
close
system
'再补充一句,如果这个算是有点难度的话,那么盖茨用basic弄出来的XP该怎么评价?
7 楼
moz [专家分:37620] 发布于 2005-05-08 08:34:00
'太大意了
'QB不支持长文件名的
'得通过批处理文件来做
defint a-z
f=freefile
open "歌名对照.txt"for input as #f
f2=freefile
open "3.bat"for output as #f2
do
line input #f,i$
i$=rtrim$(ltrim$(i$))
if i$<>"" and instr(1,i$,chr$(32))>1 then print #f2,"ren ";i$;".mp3"
loop until eof(f)
close
shell "3"
'kill "3.bat"
system
8 楼
qb45 [专家分:2880] 发布于 2005-05-08 09:32:00
我做过一个改名程序
当时也是调用SHELL "REN XXX1.XX XXX2.XX"
但是发现只能调用一次就退出了
后来我就用中断处理,最后解决了QB使用长文件名的问题
用法:
注意要改名的文件在同目录下
OldFile$="test1.txt"
NewFile$="testabcdefgh.txt"
IF RenFile%(OldFile$,NewFile$) = 0 THEN PRINT "改名成功 ok"
FUNCTION RenFile% (OldFile$, NewFile$)
'文件改名:入口AH=56 DS:DX=旧文件地址 ES:DI=新
'ax% = 0: bx% = 1: cx% = 2: dx% = 3: bp% = 4
'si% = 5: di% = 6: flags% = 7: ds% = 8: es% = 9
DIM Reg%(9)
Old$ = OldFile$ + CHR$(0)
New$ = NewFile$ + CHR$(0)
Reg%(8) = VARSEG(Old$)
Reg%(3) = SADD(Old$)
Reg%(9) = VARSEG(New$)
Reg%(6) = SADD(New$)
Reg%(0) = &H7156
CALL INT86XOLD(&H21, Reg%(), Reg%())
FileRen% = Reg%(0)
END FUNCTION
9 楼
moz [专家分:37620] 发布于 2005-05-08 14:31:00
呵呵,不错
只是不知道你有没有试过编译成EXE文件会有多长
好像生成文件里包括一些出错提示的,最短的EXE也有16K
10 楼
qb45 [专家分:2880] 发布于 2005-05-08 15:09:00
我做的MP3更名器就是用了这个子程序!
我发在DOSQB论坛
我来回复