幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3141|回复: 3

[通用编程] 文件排序批量改名兼中文乱用

[复制链接]

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-12-16 16:35:26 | 显示全部楼层 |阅读模式
  1. import std.file;
  2. import std.path;
  3. import std.string;
  4. import std.stdio;
  5. long 获取创建时间(char[] 文件路径)
  6. {
  7.     long 创建时间;
  8.     long 访问时间;
  9.     long 修改时间;
  10.     getTimes(文件路径, 创建时间, 访问时间, 修改时间);
  11.     return 创建时间;
  12. }
  13. struct 时间旧新文件名
  14. {
  15.     long 创建时间;
  16.     char* 旧文件名;
  17.     char* 新文件名;
  18. }
  19. void main(char[][] args)
  20. {
  21.     if(args.length != 2)
  22.     {
  23.         printf("sample:\n>>rfl \"ff7\"\n>>ff7-map.mid => 06-map.mid");
  24.         return;
  25.     }
  26.    
  27.     char[][] 临时文件列表 = listdir(getcwd());
  28.     时间旧新文件名[] 文件列表;
  29.     时间旧新文件名[] 新文件列表;
  30.     foreach(char[] 文件名; 临时文件列表)
  31.     {
  32.         时间旧新文件名 t;
  33.         t.创建时间 = 获取创建时间(文件名);
  34.         t.旧文件名 = toStringz(文件名);
  35.         t.新文件名 = toStringz(文件名);
  36.         文件列表 ~= t;
  37.     }
  38.    
  39.     long[] 临时时间列表;
  40.     foreach(时间旧新文件名 t; 文件列表.sort)
  41.     {
  42.         临时时间列表 ~= [t.创建时间];
  43.     }
  44.     临时时间列表.sort;
  45.    
  46.     foreach(long 时间; 临时时间列表)
  47.     {
  48.         foreach(时间旧新文件名 t; 文件列表)
  49.         {
  50.             if(时间 == t.创建时间 )
  51.             {
  52.                 新文件列表 ~= t;
  53.             }
  54.         }
  55.     }
  56.    
  57.     for(uint i = 0; i < 新文件列表.length; i++)
  58.     {
  59.         uint fc = 新文件列表.length;
  60.         char[] t;
  61.         char[] c;
  62.         if(fc>=0 && fc<=9)
  63.         {
  64.             c ~= toString(i+1);
  65.         }
  66.         if(fc>=10 && fc<=99)
  67.         {
  68.             if(i>=0 && i<9)
  69.             {
  70.                 c = "0" ~ toString(i+1);
  71.             }
  72.             else
  73.             {
  74.                 c ~=  toString(i+1);
  75.             }
  76.         }
  77.         if(fc>=100 && fc<=999)
  78.         {
  79.             if(i>=0 && i<9)
  80.             {
  81.                 c = "00" ~ toString(i+1);
  82.             }
  83.             else if(i>=9 && i<=99)
  84.             {
  85.                 c = "0" ~ toString(i+1);
  86.             }
  87.             else
  88.             {
  89.                 c ~= toString(i+1);
  90.             }
  91.         }
  92.         if(fc>=1000 && fc<=9999)
  93.         {
  94.             if(i>=0 && i<9)
  95.             {
  96.                 c = "000" ~ toString(i+1);
  97.             }
  98.             else if(i>=9 && i<=99)
  99.             {
  100.                 c = "00" ~ toString(i+1);
  101.             }
  102.             else if(i>=99 && i<=999)
  103.             {
  104.                 c = "0" ~ toString(i+1);
  105.             }
  106.             else
  107.             {
  108.                 c ~= toString(i+1);
  109.             }
  110.         }
  111.         if(fc>9999)
  112.         {
  113.             return;
  114.         }
  115.         t = replace(toString(新文件列表[i].旧文件名), args[1], c);
  116.         新文件列表[i].新文件名 = toStringz(t);
  117.     }
  118.    
  119.     foreach(时间旧新文件名 t; 新文件列表)
  120.     {
  121.         printf("%s\n>> %s\n####################\n", t.旧文件名, t.新文件名);
  122.     }
  123.    
  124.     printf("Please press a key:\ny : rename all\nn : skip all\n");
  125.     switch(getchar())
  126.     {
  127.         case 121:
  128.             foreach(时间旧新文件名 t; 新文件列表)
  129.             {
  130.                 printf("%s\n>>%s\n", t.旧文件名, t.新文件名);
  131.                 std.file.rename(toString(t.旧文件名),toString(t.新文件名));
  132.             }
  133.             printf(">>>> rename ok!\n");
  134.         break;
  135.         default:
  136.             printf(">> exit program!");
  137.         break;
  138.     }
  139. }
复制代码
え~え~お!!!
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-12-16 19:36:29 | 显示全部楼层
这是,什么?汉字也能做变量么?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2009-12-16 21:58:42 | 显示全部楼层
除了关键字外,unicode中的所有字符都可以拿来用。
python 3.x ruby1.9.x....很多语言都可以这么干。
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-12-16 22:25:21 | 显示全部楼层
ruby倒是见着过。。。但是我还是喜欢英文。。。。习惯了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 21:24 , Processed in 0.019342 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表