Haskell |如何将 CSV 文件中的数字列表转换为包含列表的列表
Haskell | How to convert list of numbers in CSV file to a list containing lists
这里 Haskell 不是特别好。刚刚开始使用 I/O 和 Haskell
我有一个 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] ]
如何在保留函数类型的同时实现它?
这适用于 Replit:
import Data.List(lines)
import Distribution.Simple.Utils(unintersperse)
splitList :: String -> [[Int]]
splitList = map (map read . unintersperse ',') . lines
做同样的事情可能有很多种方法。这是我的版本:
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
main 函数使用 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],[]]
这里 Haskell 不是特别好。刚刚开始使用 I/O 和 Haskell
我有一个 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] ]
如何在保留函数类型的同时实现它?
这适用于 Replit:
import Data.List(lines)
import Distribution.Simple.Utils(unintersperse)
splitList :: String -> [[Int]]
splitList = map (map read . unintersperse ',') . lines
做同样的事情可能有很多种方法。这是我的版本:
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
main 函数使用 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],[]]