尝试使用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)发布于 2019-04-26 06:40:15
因为intoCSV希望在整个文件中流式传输,而不是读取行流,所以您需要使用一个管道,该管道可以直接从输入的bytestring流中解析和删除行,而不是尝试处理一系列行。
下面这样的代码应该是有效的:
parsePowerCsv bs = do
runConduit $
bs
.| (replicateM_ 4 (lineAsciiC sinkNull) >>
intoCSV defCSVSettings)
.| sinkList -- (dropC 4 >> sinkList)https://stackoverflow.com/questions/55808396
复制相似问题