以文本方式查看主题

-  Fortran中文网  (http://fortran.cn/bbs/index.asp)
--  Fortran语言开发经验交流  (http://fortran.cn/bbs/list.asp?boardid=3)
----  [原创]将所在目录内JPG文件改名,以按随机次序重新排列  (http://fortran.cn/bbs/dispbbs.asp?boardid=3&id=2684)

--  作者:fortranboy
--  发布时间:2012/2/28 9:55:30

--  [原创]将所在目录内JPG文件改名,以按随机次序重新排列
点击浏览该文件

本程序将所在目录内JPG文件改名 ,以按随机次序重新排列。

可用于对不具随机播放功能数码相框中的照片文件作乱序排列。

文件名改为4个字母组成,AAAA-ZZZZ,最多26^4=456976个。

作者:fortranboy

[此贴子已经被作者于2012-2-28 15:48:57编辑过]


--  作者:fortranboy
--  发布时间:2012/2/28 9:56:46

--  
$freeform              ! 将所在目录内JPG文件改名,以按随机次序重新排列

                             ! shizhengwei@yahoo.com.cn            2012-2-26

use msflib             ! 调用模块

character*255 fn

character*4 fn1       ! 修改文件名4字母组成,共26^4=456976种

character*6 h          ! 用于显示JPG文件个数的字符变量

character k

integer m,n,num,mark,mx

parameter (mx=456976)

logical s

type (file$info) :: info

write(*,\'(1x,a)\')   \'shizhengwei@yahoo.com.cn                  2012-2-26\'

write(*,\'(1x,a)\')   \'本程序将所在目录内JPG文件改名,以按随机次序重新排列\'

write(*,\'(1x,a)\')   \'文件名改为4个字母组成,AAAA-ZZZZ,最多26^4=456976个\'

write(*,\'(1x,a,\\)\') \'按Enter键继续,按其它键退出程序 ...\'

k=getcharqq()

if(k.ne.char(13)) stop \' \'

write(*,*)

write(*,*)

open(1,status=\'scratch\',iostat=io)

if(io.ne.0) then

   write(*,\'(1x,a,\\)\') \'无法建立列表用的临时文件,按任意键结束\'

   k=getcharqq()

   stop \' \'

end if

call random_seed()     ! 由系统置随机数种子

mark=file$first             ! 设置搜寻文件的起始标志

  

do num=1,mx              ! 列表写入临时文件,避免重复查找已改文件

   n=getfileinfoqq(\'*.JPG\',info,mark)

   if(mark.eq.file$last.or.mark.eq.file$error) exit

   fn=info.name

   write(1,\'(a)\') fn(1:n)

end do

num=num-1

if(num.eq.mx) then

   write(*,\'(1x,a,\\)\') \'JPG文件太多,无法处理。按任意键结束\'

else if(num.eq.0) then

   write(*,\'(1x,a,\\)\') \'没有找到JPG文件。按任意键结束\'

else

   write(h,\'(i6)\') num

   write(*,\'(1x,3a)\') \'共找到\',h(6-int(log10(num*1.0)):6),\'个JPG文件\'

   rewind(1)              ! 根据num数值大小调整显示字符的长度

   do while(.true.)     ! 文件改名

      read(1,\'(a)\',iostat=io) fn

      if(io.ne.0) exit

      do while(.true.)

         call random_number(x)

         m=mx*x

         do i=4,1,-1   ! 10进制转26进制,形成新文件名

            fn1(i:i)=char(65+mod(m,26))

            m=m/26

         end do

         s=renamefileqq(trim(fn),fn1//\'.JPG\')

         if(s) exit          ! 改名失败再循环,针对重名等小概率情况

      end do

   end do

   write(*,\'(1x,a,\\)\') \'JPG文件改名完毕,按任意键结束\'

end if

close(1)                  ! 先关临时文件,防止直接关窗口造成文件残留

k=getcharqq()

end

[此贴子已经被作者于2012-2-28 15:53:10编辑过]


京ICP备05056801号