首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收集缓冲区的行

收集缓冲区的行
EN

Stack Overflow用户
提问于 2013-01-03 05:56:12
回答 1查看 137关注 0票数 1

有一些流程输出需要每行解析成结构体。

代码语言:javascript
复制
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.}

这些数据在一个缓冲区中。那么,我如何读取每一行并将其传递给一个函数,该函数返回一个解析的表示并最终收集所有行呢?

编辑:解析行的代码(未调试):

代码语言:javascript
复制
(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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-03 06:20:29

对解析器做了一些小改动:

代码语言:javascript
复制
(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*,您可以这样解析它:

代码语言:javascript
复制
(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包装器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14129842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档