- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的类型:
data Test = Test {
a :: Int,
b :: Int
} deriving (Show)
我的解析器:
testParser :: Parser Test
testParser = do
a <- decimal
tab
b <- decimal
return $ Test a b
tab = char '\t'
现在为了跳过第一行,我做了这样的事情:
import qualified System.IO as IO
parser :: Parser Test
parser = manyTill anyChar endOfLine *> testParser
main = IO.withFile testFile IO.ReadMode $ \testHandle -> runEffect $
for (parsed (parser <* endOfLine) (fromHandle testHandle)) (lift . print)
但是上面的parser
函数使每个备用链接都跳过(这是显而易见的)。如何仅跳过第一行以使其与 Pipes 生态系统配合使用(Producer
应生成单个 Test
值。)这是一个我不认为的明显解决方案不想要(以下代码仅在我修改 testParser 以读取换行符时才有效),因为它返回整个 [Test]
而不是单个值:
tests :: Parser [Test]
tests = manyTill anyChar endOfLine *>
many1 testParser
有什么想法可以解决这个问题吗?
最佳答案
您可以像这样在恒定空间中有效地删除第一行:
import Lens.Family (over)
import Pipes.Group (drops)
import Pipes.ByteString (lines)
import Prelude hiding (lines)
dropLine :: Monad m => Producer ByteString m r -> Producer ByteString m r
dropLine = over lines (drops 1)
您可以在解析 Producer
之前将 dropLine
应用于您的 Producer
,如下所示:
main = IO.withFile testFile IO.ReadMode $ \testHandle -> runEffect $
let p = dropLine (fromHandle testHandle)
for (parsed (parser <* endOfLine) p) (lift . print)
关于haskell - 跳过管道 attoparsec 中的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24673962/
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我想,只是为了了解一些关于 Iteratees 的知识,使用 Data.Iteratee 和 Data.Attoparsec.Iteratee 重新实现我制作的一个简单的解析器。不过,我很难过。下面我
我被 attoparsec 困住了,我无法返回关于它是“嵌入式类型”的值。 我试图解析一个文件: type value type value ... 例如: 0 -- code for a strin
我正在使用 Attoparsec,并且我想在整个解析任务中跟踪用户状态值。 我熟悉 Parsec 的一元函数 getState、putState 和修改状态,但我似乎无法在 Attoparsec 中找
我正在尝试在第 5 列中使用 JSON 制作适合导入到 mongoDB 的大型 TSV 文件。特别是我想将顶级和仅顶级关键字段更改为 _id。这是我目前所拥有的,它似乎有效但速度很慢: {-# LAN
假设有一个数据结构表示一个文本,里面有评论。 data TWC = T Text TWC -- text | C Text TWC -- comment | E -- end deri
我正在使用据说默认回溯的 Attoparsec。但是,以下行: parseOnly (string "foo" *> many1 anyChar manyTill1 p e = (:) p m
我正在尝试用一个函数来扩充 Haskell 的 Attoparsec 解析器库 takeRegex :: Regex -> Parser ByteString 使用其中一种正则表达式实现。 (动机:好
是否有一些“简单”的方法(例如我在 Attoparsec 或其他一些库中缺少的东西)将定义的 Attoparsec 解析器从 ByteString 解析为从 Text 解析的解析器? 例如我有: im
Attoparsec提供了至少消耗一个字符的函数 takeWhile1。 但是,skipWhile 没有类似的东西。如何实现这个函数skipWhile1? 注意:这个问题故意表现出没有研究工作,因为它
我正在将一些使用 Parsec 的功能 Haskell 代码转换为使用 Attoparsec,希望获得更好的性能。我已经进行了更改并且所有内容都已编译,但我的解析器无法正常工作。 我正在解析一个由各种
我的类型: data Test = Test { a :: Int, b :: Int } deriving (Show) 我的解析器: testParser :: Parser Test tes
背景 我使用 attoparsec 编写了一个日志文件解析器。我所有较小的解析器都成功了,组成的最终解析器也是如此。我已通过 tests 确认了这一点。但我在使用解析的流执行操作时遇到了困难。 我尝试
我一直在编写 attoparsec 解析器,并且一直在寻找一种模式,我想将解析器转换为递归解析器(将它们与 monad 绑定(bind) >>= 运算符递归地组合)。 所以我创建了一个函数将解析器转换
我一直在编写一个 attoparsec 解析器来解析 Uniform Code for Units of Measure 的内容。调用 。它被定义为某个类(该类包括所有数字 0-9)中不以数字结尾的最
Attoparsec提供了至少消耗一个字符的函数 takeWhile1。 但是,skipWhile 没有类似的东西。如何实现这个函数skipWhile1? 注意:这个问题故意表现出没有研究工作,因为它
我正在使用 attoparsec 的内置解析器“double”和“number”来解析浮点值,我从不同的解析器得到不同的结果。 >parse number "8.918605790440055e-2"
attoparsec 0.72 有这个功能,但在后来的版本中似乎消失了: stringTransform :: (ByteString -> ByteString) -> ByteString ->
我有一个简单的基于 attoparsec 的 pdf parser .它工作正常,直到与 iteratee 一起使用。 当输入的大小超过缓冲区大小时。 import qualified Data.By
我使用 attoparsec 编写了以下解析代码: data Test = Test { a :: Int, b :: Int } deriving (Show) testParser :
我是一名优秀的程序员,十分优秀!