私は、このフォーラムの最近のアドバイスから、無駄なプロセッサ時間と変数の使用を減らすために、可能であれば「ステートマシン」ロジックを使用してプロジェクトを再開することで得たいと考えています。
私はNick Gammonsのステートマシンからシリアルポートからの入力を処理するようになっています 'example http://www.gammon.com.au/statemachine を参照してください。これは、可能なすべてのマシン状態(本質的に2次元グリッド)に対して、すべての特殊制御文字 'イベント'の可能な組み合わせをすべて示しています。
私はDOSコマンドラインフォーマットに似た command [parameters] [options] "の形式でシリアル入力を処理するという目標を洗練しました。たとえば、 DIR" c :\ program files "/ w/s ]をクリックします。これは私に大きなBuffer []とHeader []の文字列を必要としないようにし、
したがって、私のイベント制御文字はスペース、カンマ、一重引用符、二重引用符、スラッシュ、カラジーグリターン、そして私の '状態'は NULL、COMMAND、PARAMETER、OPTIONS
OPTIONS状態は、カンマまたはスペースデリミタまたはCarraige Returnがそのオプションを適切に処理し、おそらく認識された変数にその値を保存するまで、テンポラリオプション[]文字列に文字を追加します。
COMMANDとPARAMETERの '状態'は、特殊文字が一重引用符または二重引用符の中に含まれている場合は、対応するコマンド[]とパラメータ[]文字列に文字を追加します(ペア内で使用する場合は引用符を文字列の一部として使用できます)他のタイプのもの)。
したがって、 NoQuotes、SingleQuotesおよびDoubleQuotes にCOMMAND、PARAMETERおよびOPTIONS状態の操作を変更するために必要な第2の状態マシンがあるようです。
これは、私がニューロンを使い果たした場所です。なぜなら、私が見るのは、非常に多くの可能な順列を持つ不可能な複雑な2つの機械状態の3次元グリッドだからです。
しかし、プロセッサーの能力とメモリの可用性が鶏の歯よりも乏しい時代にまでさかのぼるほとんどすべてのコマンドラインユーティリティの中心に位置しているため、これを実装する方法は非常に実用的でなければならないと考えられます。コマンドラインの解析を含め、可能な限り最善のものでなければなりませんでした。
だから誰でも入力からコマンドライン型のフォーマットを得るための実現可能なモデル(機械状態かそうでないか)を提案することができますか?
更新
ああ、私はちょうど私が前に見つけていなかった別の複雑さを見てきました。これは、オプションが必ずしも必ずしも最後ではないということです。オプションがcarraige-return、options状態区切り文字による変更は、オプション状態の変更前の状態に戻らなければなりません(phew、私はそれが意味をなさないことを望みます)。とにかく、2つの答えが既に示唆しているように、このアプローチは複雑すぎるように思われるので、それは描画ボードに戻っていると思います。