尝试使用csv文件并删除前4行,然后继续进行我的解析:
parsePowerCsv
:: MonadThrow m
=> ConduitT () ByteString m () -> m [PowerFields]
parsePowerCsv bs = do
runConduit $
bs
.| CL.consume
.| (dropC 4 >> intoCSV defCSVSettings)
因此,我能够生成Text
的列表,但由于我拥有PowerFields
实例,但希望能够轻松转换为我的From/To NamedRecord
类型,但我想先删除这些实例4行。
所以在dropC
之后,我无法将[Text]
解析为[PowerFields]
data PowerFields =
PowerFields
{ VA_avg :: Maybe Double
, A_avg :: Maybe Double
, Wh_sum :: Maybe Double
...
} deriving (Eq, Show, Read)
答案 0 :(得分:0)
由于intoCSV
希望在整个文件中进行流传输,而不是读取行流,因此,您将需要使用可以直接从输入字节串流中解析和删除行的管道,而不是尝试处理行列表。
类似以下的方法应该起作用:
parsePowerCsv bs = do
runConduit $
bs
.| (replicateM_ 4 (lineAsciiC sinkNull) >>
intoCSV defCSVSettings)
.| sinkList -- (dropC 4 >> sinkList)