我正在使用System.FilePath.Find
filemanip 模块递归地查找我需要处理的所有文件(这里我将仅使用打印到控制台作为要执行的操作,以免混淆事物)。现在,这段代码:
import System.Environment (getArgs)
import System.FilePath (FilePath)
import System.Directory (doesDirectoryExist, getDirectoryContents,doesFileExist)
import Control.Monad
import System.FilePath.Find (find,always,fileType,(==?),FileType(..),(&&?),extension)
main= do
[dbFile,input]<- getArgs
files <- findFiles input
mapM_ putStrLn files
return ()
searchExtension :: String
searchExtension = ".hs"
findFiles :: FilePath -> IO [String]
findFiles = find (always) ( fileType ==? RegularFile &&? extension ==? searchExtension)
与此通话效果很好
./myprog tet .
在这种情况下,get
参数将被忽略(稍后将是输出数据库文件),并递归搜索第二个参数以查找匹配文件。它还允许我指定一个文件,这非常完美!
但是,我希望能够指定
./myprog tet path1 path2 path4 file1
但这当然在模式匹配中失败了:
./myprog tet . .
myprogt:用户错误(myprog.hs:11:9-22 处的 do 表达式中的模式匹配失败)
现在,我如何使这个程序更灵活,以便我可以接受两个以上的参数?
很抱歉问这个问题,但我的 Haskell 知识是有限的,但我在第一个项目中必须做的每件新事情都会增加。