1

行ごとに構造体に解析する必要があるプロセス出力があります。

sug skProc  strutils.capitalize proc (string): string{.noSideEffect.}
sug skProc  strutils.quoteIfContainsWhite   proc (string): string
sug skProc  system.gorge    proc (string, string): string
sug skProc  system.of   proc (T, S): bool{.noSideEffect.}
sug skProc  system.definedInScope   proc (expr): bool{.noSideEffect.}
sug skIterator  system.items    iterator (cstring): char{.inline.}
sug skProc  system.ord  proc (T): int{.noSideEffect.}

このデータはバッファ内にあります。では、各行を読み取って、解析された表現を返す関数に渡し、最終的にすべての行を収集するにはどうすればよいでしょうか?

編集:行を解析するためのコード(デバッグされていません):

(defstruct nimrod-sug type namespace name signature)

(defun nimrod-parse-suggestion-line (line)
  (let ((split (split-string line "[\t\n]")))
    (make-nimrod-sug
     :type (nth 1 split)
     :namespace (first (split-string (nth 2 split) "\\."))
     :name (second (split-string (nth 2 split) "\\."))
     :signature (nth 3 split))
4

1 に答える 1

1

パーサーにいくつかの小さな変更を加えました。

(defun nimrod-parse-suggestion-line (line)
  (destructuring-bind (_ type fn &rest sig) (split-string line "[[:space:]]+" t)
    (make-nimrod-sug :type      type 
                     :namespace (first  (split-string fn "\\."))
                     :name      (second (split-string fn "\\."))
                     :signature (apply 'concat sig))))    

バッファの名前がであると仮定すると、次の*output*ように解析できます。

(with-current-buffer "*output*" 
  (mapcar 'nimrod-parse-suggestion-line
          (split-string (buffer-string) "[\r\n]" t)))

; => ([cl-struct-nimrod-sug "skProc" "strutils" "capitalize" "proc(string):string{.noSideEffect.}"] ...)

現在出力バッファにアクセスしている場合は、with-current-bufferラッパーは必要ありません。

于 2013-01-02T22:20:28.507 に答える