這里的 Haskell 并不是特別好。剛開始使用 Haskell 進行 I/O
我有一個帶有單列的 CSV 檔案,其中的數字如下:

我有一個函式,它接受檔案名并列印出一個串列,其中包含 CSV 型別的每一行的串列:
printList :: String -> IO ()
printList nameOfinputFile = do
s <- readFile inp
..................
..................
..................
print (splitList)
其中 splitList 是預期的輸出,對于給定的 CSV 檔案示例,它看起來像:
[ [1,2,3],[4,5],[6,7,8,9],[10],[11,12,13,14,15],[16],[17] ]
如何在保留函式型別的同時實作這一點?
uj5u.com熱心網友回復:
這適用于Repli:
import Data.List(lines)
import Distribution.Simple.Utils(unintersperse)
splitList :: String -> [[Int]]
splitList = map (map read . unintersperse ',') . lines
uj5u.com熱心網友回復:
可能有很多方法可以做同樣的事情。這是我的版本:
import Data.List.Split
convList [] = []
convList [""] = []
convList xs = map (\x -> read x :: Int) xs
main = do
content <- readFile "Test.csv"
let valuesStr = map (splitOn ",") $ lines content
let valuesInt = map convList valuesStr
print valuesInt
主要功能用于readFile在 CSV 檔案中啜飲。該函式lines用于拆分內容,然后splitOn映射到行上。最后,一個新函式convList映射到每個串列中的值。該函式convList具有三種可能性:
- 空串列,產生一個空串列
- 空行,產生一個空串列
- 元素存在,產生值(這里是 Int,可能是 Double)
結果有額外的空行:
[[1,2,3],[4,5],[6,7,8,9],[10],[11,12,13,14,15],[16],[17],[]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450277.html
標籤:哈斯克尔
