首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用conduit-csv删除行

使用conduit-csv删除行
EN

Stack Overflow用户
提问于 2019-04-23 17:42:45
回答 1查看 103关注 0票数 3

尝试使用csv文件并删除前4行,然后继续解析:

代码语言:javascript
复制
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]

代码语言:javascript
复制
data PowerFields =
  PowerFields
    { VA_avg         :: Maybe Double
    , A_avg          :: Maybe Double
    , Wh_sum         :: Maybe Double
    ...
    } deriving (Eq, Show, Read)
EN

回答 1

Stack Overflow用户

发布于 2019-04-26 06:40:15

因为intoCSV希望在整个文件中流式传输,而不是读取行流,所以您需要使用一个管道,该管道可以直接从输入的bytestring流中解析和删除行,而不是尝试处理一系列行。

下面这样的代码应该是有效的:

代码语言:javascript
复制
parsePowerCsv bs = do
  runConduit $
      bs
      .| (replicateM_ 4 (lineAsciiC sinkNull) >>
          intoCSV defCSVSettings)
      .| sinkList -- (dropC 4 >> sinkList)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55808396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档