我正在尝试从给定路径读取和写入文件。问题是,当我从文件(在Windows上为Im)复制路径时,它使用'\'作为路径分隔符,但haskell似乎无法理解它,因为例如:“ aDir \ file.txt”错误地读取了'\ f'是无效字符。
这就是为什么我试图创建一个函数来将该路径“规范化”(转换)为一个以“ /”作为路径分隔符的函数(效果很好),但是我认为它不起作用,因为同样的原因。 有没有内置的功能已经为我做到了?
link
答案 0 :(得分:6)
我认为您使事情变得更加复杂。您可以在此处使用map
normalizePath :: String -> String
normalizePath = map f
where f '\\' = '/'
f x = x
因此,我们在这里将所有'\\'
个字符转换为'/'
个字符。
请注意,字符串"aDir\file.txt"
不会包含反斜杠,因为它是使用'\f'
(即换页符)进行解析的。如果字符串包含反斜杠,则作为字符串文字,其格式应为"aDir\\file.txt"
。
例如:
Prelude> normalizePath "aDir\\file.txt"
"aDir/file.txt"
您可以通过raw-strings-qq
package [Hackage]输入 raw 字符串。例如:
$ ghci -XQuasiQuotes
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude> :{
Prelude| normalizePath :: String -> String
Prelude| normalizePath = map f
Prelude| where f '\\' = '/'
Prelude| f x = x
Prelude| :}
Prelude> import Text.RawString.QQ
Prelude Text.RawString.QQ> normalizePath [r|C:\Users\admin\Desktop\file.txt|]
"C:/Users/admin/Desktop/file.txt"