回 帖 发 新 帖 刷新版面

主题:给大家出一个题

还是在这里给大家出一个题吧(在45兄的帖子里面出不太合适):

当前目录里有一大堆001.mp3、002.mp3之类的文件,另外还有一个文本文件,里面是文件名与歌名的对照,一行一个,中间用若干个空格分开。现在要求编一个程序,把所有的.mp3的主文件名改为歌名。

(这个题还是有些难度的哦)

回复列表 (共11个回复)

沙发

算法:
1:打开文件
2:读出文件名和歌名
3:歌名=歌名+".mp3"
4.shell "ren "+文件名+" "+歌名
5.重复2.3.4步的操作,直至文件结束

板凳

我不会,你能教我吗?

3 楼

看谁能按codepk在1楼的算法写出代码?

4 楼

4.shell "ren "+文件名+" "+歌名
在这个会卡住
在程序里只能调用REN一次

5 楼

楼上的说法有点出乎意外。我觉得不会是只能调用一次吧?

6 楼

'深夜难眠,献献丑。
'默认在当前目录,否则请加一句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 楼

'太大意了
'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 楼

我做过一个改名程序
当时也是调用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 楼

呵呵,不错
只是不知道你有没有试过编译成EXE文件会有多长
好像生成文件里包括一些出错提示的,最短的EXE也有16K

10 楼

我做的MP3更名器就是用了这个子程序!
我发在DOSQB论坛

我来回复

您尚未登录,请登录后再回复。点此登录或注册