将Comiket物的文件名格式统一化的脚本(F#版)

既然Ruby的简单版和C#的版本都写了,写个F#版来对比一下也不错。

下面的程序逻辑基本上与前一篇的C#版类似,只是在如何抽取出文件名中的各部分的实现用了不同的划分方式:C#版的TryGetRenameName()方法更倾向于直接支持不同的pattern和format;F#版则是直接把pattern和format硬编码到parseFilename和getReformattedFilename函数里了。到底该怎么划分好我也不太肯定,不过在这么小的程序里划分方式好不好体现不出来,或许也不值得多想吧?

ReformatComiketFilenames.fsx

F#代码

#light

open System
open System.IO
open System.Text.RegularExpressions

let parseFilename name =
  let result = Regex.Match(name, @"^\(([^)]+)\)\s*\(([^)]+)\)\s*\[([^\]]+)\]\s*(.+)$")
  let success = result.Success
  let comiketNum = result.Groups.Item(1).Value
  let contentType = result.Groups.Item(2).Value
  let circleName = result.Groups.Item(3).Value
  let itemName = result.Groups.Item(4).Value
  success, comiketNum, contentType, circleName, itemName

let getReformattedFilename name =
  let success, comiketNum, contentType, circleName, itemName = parseFilename name
  if success then
    sprintf "(%s)(%s)[%s] %s" comiketNum contentType circleName itemName
  else name

let reformatAndRenameDir (dirInfo : DirectoryInfo) =
  let name = dirInfo.Name
  let destName = getReformattedFilename name
  if name <> destName then
    printfn "%s" destName
    dirInfo.MoveTo(Path.Combine(dirInfo.Parent.FullName, destName))
    true
  else false

let reformatAndRenameFile (fileInfo : FileInfo) =
  let name = fileInfo.Name
  let destName = getReformattedFilename name
  if name <> destName then
    printfn "%s" destName
    fileInfo.MoveTo(Path.Combine(fileInfo.DirectoryName, destName))
    true
  else false

let getRootDir = fun () ->
#if COMPILED
  let args = Environment.GetCommandLineArgs ()
#else
  let args = fsi.CommandLineArgs
#endif
  let rootPath =
    match args with
    | [| _ |] -> new DirectoryInfo(Environment.CurrentDirectory);
    | _ -> new DirectoryInfo(args.[1])
  rootPath

let main = fun () ->
  let root = getRootDir ()
  Array.iter (fun dir -> (reformatAndRenameDir dir; ())) (root.GetDirectories())
  Array.iter (fun file -> (reformatAndRenameFile file; ())) (root.GetFiles())

main ()

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, result
, name
, let
contenttype
shell脚本获取文件名、批量修改文件名脚本、bat脚本修改文件名、bat脚本获取文件名、shell脚本读取文件名,以便于您获取更多的相关知识。

时间: 2024-12-22 02:11:09

将Comiket物的文件名格式统一化的脚本(F#版)的相关文章

将Comiket物的文件名格式统一化的脚本

又到了Comiket大潮,抓下来的文件的名字总是格式不统一,按照文件名排序来查看很不方便.于是又到了出动Ruby的时间- (每次到批量重命名文件的时候我的第一反应就是打开irb--) 这次的脚本在好几个类别的目录下都能用,所以顺便记下来. 脚本作用:将类似"(Cxx)(item_type)[circle_name] item_name"的文件名中开头部分的空格调整到:前缀标签间不包括空格,标签整体与后面的文件名之间留一个空格.普通文件和目录都是重命名的目标.不符合这种带有两组圆括号和一

word2016问过文档怎么合并成一个并设置格式统一?

word2016问过文档怎么合并成一个并设置格式统一?   1.首先建立一个Word文档,以便于将需要整个的文档归入其中 2.打开文档,在[插入]工具下打开[对象]的下拉选框. 3.下下拉复选框中选择[文件中的文字] 4.然后在弹出的对话框中,选择需要合并的文档(不要把新建的文档选中了) 5.在选择文档的时候需要注意的是,如果想按照一定顺序合并到新的文档的话,那在选择的时候就要按照顺序选择,否则文档问按照你选择的顺序排列起来. 6.此时合并进来额文档可能因为之前编辑的时候才用了不同的格式,我们需

检索换新装 视频图片检索端统一化分享

  起初浏览图片和视频的检索页面,发现页面有很多可以改进的地方, 如:布局结构.间距.字色.筛选.TAB.缩略图大小.行数.列数,RS样式等. 接着参看了大量的竞品,讨论,沟通,获得了不少收获和启发,并产出一些最初的设计想法. 在结构布局.缩略图排列.筛选区域.交互效果.颜色样式等方面都作出不同尝试,通过产出.讨论,抛出问题. 抛出的问题: 产品页面多年的沉淀,用户习惯不容忽视,图片和视频的用户在浏览须有上有所差异. 共同的特点: 相同的都是检索端,结构布局大致相同. 当搜索人物类query时会

用户体验部无线端APP统一化路程

一.为什么要做? 最初我们只有一个产品,产品就是品牌,品牌也就是这个产品,但后来产品多了,丰富了,开始强调差异化,我们需要提取更多共性的特征到品牌塑造中.品牌也就自然会独立出来,作特定考虑研究.品牌的核心仍然是产品,尤其在快速变化的互联网.移动互联网品牌化还不够理想的情况下,做好产品自然是给品牌加分的事情. 系统化的思考产品,更多的横向关联的推衍及提取共性,无疑会给产品迭代带来好处,会使用户认知与使用降低成本,功能传承性得到体现,通过这样一系列共性的传递,从而树立品牌特征,形成我们独特的语言.

微软化繁为简 揭开Windows统一化的神秘面纱

最近关于微软的消息不绝于耳,大幅裁员的计划让整个科技界都震惊不已.不过微软目前也受到苹果谷歌等公司的夹击,再不做些改变前景确实堪忧.CEO纳德拉就对微软做了大手术,不仅大胆解雇众多员工,还要统一微软的各个Windows平台来提高效率.下面我们就来了解微软这一统一计划,看看与我们想象的有什么出入.微软新任CEO萨蒂亚·纳德拉微软的高管们在过去的一年多时间努力解释Windows系统的发展方向,而微软CEO萨蒂亚·纳德拉(Satya Nadella)也告诉媒体和分析师,下一代的Windows系统将整合

两岸咖啡的连锁之路:统一化+标准化+差异化

每天金梅央坐在杭州两岸咖啡总部办公室便可以通过http://www.aliyun.com/zixun/aggregation/13617.html">信息管理系统清晰地看到全国所有门店的经营状况.打烊时间.收支报表.进销存等状况."在530家两岸咖啡店中,大概每天是15万左右的客流,一年累积下来有四五千万人."她介绍说.现在,两岸咖啡西餐连锁实行多品牌运作,除了有两岸咖啡,还有日本料理以及定位高端的两岸铁板烧,从早上十点营业到半夜两三点. 2003年,金梅央的两岸咖啡是

Linux集群和自动化维1.4.3 CentOS 6.4 x86_64系统最小化优化脚本

1.4.3 CentOS 6.4 x86_64系统最小化优化脚本  CentOS 6.4 x86_64系统最小化优化脚本,脚本内容如下所示(请注意下面的代码中有中文注释内容,如果是放在线上运行时则要注意): #!/bin/bash #系统基础升级 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak mv CentO

求正则表达式:上传文件的文件名格式

问题描述 通过UpLoad的控件上传,得到文件路径.例如E:xxxas$.txt需要一正则表达式来验证文件名as$.txt仅包含英文字母和数字,如何实现? 解决方案 解决方案二:stringstr=@"xxxass34.txt";stringstrReg=@".+\[^.][a-zA-Z0-9]+.txt$";Response.Write(Regex.Match(str,strReg,RegexOptions.IgnoreCase).Success);解决方案三:那

IrisSkin2.dll控件引用之后,所有控件格式统一,如果局部想取消显示自定义格式,怎么办呢?

问题描述 补充:比如说我现在为Label控件的字体颜色设置为红色,但是我设置之后没有显示,还是套用统一格式的字体颜色,如何取消呢,显示我自定义的颜色呢.各位高手,谢谢大家了! 解决方案 解决方案二:这个能吗?不懂,帮顶.解决方案三:取消相应控件上的皮肤即可