問題タブ [attoparsec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - attoparsec 巨大なファイルの読み取りでメモリ使用量が多い
ファイルの内容を行ごとに解析するための多くのアプローチを試しましたが、現時点では機能しておらず、実行すると大量のメモリ (16GB 以上) を使用します。
これは、解析したいファイルのサブセットですhttp://lpaste.net/144719
次の 3 種類のエラーが必要です。
1) バックトレースのエラー (複数行、最初の行は 3))
2) もう 1 行の単一エラー
3) 単一行エラー
これが私の現在のコードです:
最初の問題は、パーサーが何も解析していないことです。2 つ目の問題は、16GB の RAM を使用していることです。どうすれば私のアプローチを改善できますか?
haskell - attoparsec で特定の文字で終わらない識別子を解析する
私は attoparsec パーサーを書いて、測定単位の統一コードが a と呼ぶものを解析するのに行き詰まってい<ATOM-SYMBOL>
ます。これは、数字で終わらない特定のクラス (そのクラスには 0 ~ 9 のすべての数字が含まれる) の最長の文字シーケンスであると定義されています。
したがって、何も消費せずに失敗したいので、消費しfoo27
て返したい入力があるとします。foo
237bar26
237bar
19
takeWhile1
or takeTill
orからこれを構築する方法がわかりませんscan
が、おそらく明らかな何かが欠けています。
更新:これまでの私の最善の試みは、完全に数字であるシーケンスを除外することができたことです
それを変更して、最後の文字がすべて数字ではなく数字であるかどうかをテストしようとしましたが、一度に1文字ずつバックトラックするようには見えません。
更新 2:
ファイル全体はhttps://github.com/dmcclean/Dimension-attoparsec/blob/master/src/Numeric/Units/Dimensional/Parsing/Attoparsec.hsにあります。これは、 https://github.com/dmcclean/Dimensionprefixes
からのブランチに対してのみビルドされます。
haskell - 多分結果を伴う Attoparsec オプションのパーサー
次のようなAttoparsecパーサーがあります。
このパーサーをオプションにしたいのでJust txt
、パーサーが一致するかどうかを返す関数Nothing
、つまり署名の関数を取得します。
これどうやってするの?
haskell - Conduit と Attoparsec: 解析エラーによる予期しない終了
しばらく前に書いたログ ファイル パーサーをコンジットに変換しようとしていますが、問題が発生しています。質問とは関係ないので、パーサー自体の詳細を単純化します。次のようなログ ファイルがあります。
したがって、解析コードは非常に簡単です。
ここまでは順調ですね。コンジットでこれを実装する方法は次のとおりです。
実行するmain
と、次の出力が得られます。
私がやりたいように、ファイルの次の行を解析し続けるのではなく、パイプラインがこの時点で終了する理由を理解するのに苦労しています。のドキュメントを読むとData.Conduit.Attoparsec
、これはまさにユースケースconduitParserEither
が設計されたようです。
アップデート
@Fabian によると、それはconduitParserEither
私がここで望んでいたものではなかったことがわかりました。parseEntry
これが私がやりたかったことの定義です:
parsing - attoparsec で不要なテキストをスキップする方法
これに似たメールを解析したい
しかし、この電子メールのすべての情報は必要ありません。「差出人」、「件名」、およびメッセージ自体のみ。このようなメッセージを解析するにはどうすればよいですか? より具体的には、不要なデータをスキップするにはどうすればよいですか?
ここに私がこれまでに持っているコードがあります
parsing - エスケープ文字を許可する文字列の高速解析?
エスケープ文字を含む可能性のある文字列を解析しようとしています。例を次に示します。
上記のパーサーは を作成しString
、それを にパックしText
ます。attoparsec が提供する効率的な文字列処理のための関数を使用して、上記のようなエスケープで文字列を解析する方法はありますか? のようstring
にscan
、、、、runScanner
_takeWhile
...
のようなものを解析すると、"one \"two\" \[three\]"
が生成されone "two" [three]
ます。
更新:
@epsilonhalbe のおかげで、自分のニーズに最適な一般化されたソリューションを見つけることができました。[..]
次の関数は、".."
、(..)
、 などの一致するエスケープ文字を検索しないことに注意してください。また、無効なエスケープ文字が見つかった場合は\
、リテラル文字として扱います。