在路径字符串上将'\\'更改为'/'

时间:2019-08-24 17:34:19

标签: haskell

我正在尝试从给定路径读取和写入文件。问题是,当我从文件(在Windows上为Im)复制路径时,它使用'\'作为路径分隔符,但haskell似乎无法理解它,因为例如:“ aDir \ file.txt”错误地读取了'\ f'是无效字符。

这就是为什么我试图创建一个函数来将该路径“规范化”(转换)为一个以“ /”作为路径分隔符的函数(效果很好),但是我认为它不起作用,因为同样的原因。 有没有内置的功能已经为我做到了?

link

1 个答案:

答案 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"