首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

F# 實作 Comiket 檔案名稱標準化腳本:正則解析與模式比對函數式風格

     編輯:關於ASP.NET

以 F# 函數式風格重寫 Comiket 檔案名稱格式化工具,展示模式比對、管道運算子與不可變資料流處理。

核心邏輯:解析與重組


let parseFilename name =
    let result = Regex.Match(name, @"^\(([^)]+)\)\s*\(([^)]+)\)\s*\[([^\]]+)\]\s*(.+)$")
    let success = result.Success
    let comiketNum = result.Groups.[1].Value
    let contentType = result.Groups.[2].Value
    let circleName = result.Groups.[3].Value
    let itemName = result.Groups.[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 destName = getReformattedFilename dirInfo.Name
    if dirInfo.Name <> destName then
        printfn "%s" destName
        dirInfo.MoveTo(Path.Combine(dirInfo.Parent.FullName, destName))
        true else false

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

主程式入口


let getRootDir () =
    match Environment.GetCommandLineArgs() with
    | [| _ |] -> DirectoryInfo(Environment.CurrentDirectory)
    | _ -> DirectoryInfo(fsi.CommandLineArgs.[1])

let main () =
    let root = getRootDir()
    Array.iter (fun d -> reformatAndRenameDir d |> ignore) (root.GetDirectories())
    Array.iter (fun f -> reformatAndRenameFile f |> ignore) (root.GetFiles())

main()

F# 特色展現

  • 模式比對:match ... with 處理命令列參數
  • 管道運算子:|> 鏈式資料流(此處用 Array.iter 替代)
  • 不可變預設:解析函數無副作用,重組純函數
  • 單元測試友善:純函數易於獨立測試
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved