"abc, def, ghi" のようなCSVのデータのようにデータがセパレータで分けられているものがある。こういう文字列を効果的に処理できるのが、sepBy コンビネータだ。sepBy コンビネータは、第1引数にデータ部分のパーサを、第2引数にセパレータのパーサをとる。戻り値はデータのリストだ(Parser モナドの形で返される)。many, many1 の時と同じく、データが0個でもマッチする sebBy と、最低1個のデータが必要な sepBy1 がある。
Hugs> :l Text.ParserCombinators.Parsec Text.ParserCombinators.Parsec> parseTest (sepBy word (char ',')) "abc,def,ghi" where word = many1 letter ["abc","def","ghi"] Parsec, a fast combinator parser には、sepBy1 に加えて、セパレータ前後の空白を無視する機能、複数個の行末の区切り文字を認識してパースを中止する機能を加えた例 sentence が紹介されている。 import Text.ParserCombinators.Parsec sentence :: Parser [String] sentence = do{ words <- sepBy1 word separator ; oneOf ".?!" ; return words } separator :: Parser () separator = skipMany1 (space <|> char ',') word :: Parser String word = many1 letter 実行例: Main> parseTest sentence "hi,di,hi." ["hi","di","hi"]
by tnomura9
| 2009-09-30 11:38
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||