【问题标题】:Lisp script to parse csv and generate HTML table?Lisp 脚本解析 csv 并生成 HTML 表?
【发布时间】:2009-10-09 03:44:12
【问题描述】:

我正在尝试编写一个小的 Emacs Lisp 脚本,该脚本从标准输入读取 csv 文件,将所有行转换为表格,然后将其打印到标准输出 (Unix)。我编写了一个基本版本,它采用 csv 字符串并将表格输出到缓冲区。不过,我想把它变成一个 Unix 实用脚本。

#!/usr/bin/emacs --script (defun gen-row (lst) (dolist (榆树 lst) (插入“”) (插入(连接“”榆树“”)) (插入“”) ) ) (defun parse-csv-line (txt) (setq lst (progn (插入“\n\n”) (setq str txt) (gen-row (split-string str ",")) (插入“\n\n”) )) ) (parse-csv-line "this,is,a test")

在 Emacs 中运行时输出到当前缓冲区:

这个 是 一个测试

脚本的使用:

./csv2html bar.html; # emacs --script 而不是 perl -ane '...'

【问题讨论】:

  • 您可能想要使用 #!/usr/bin/env emacs,因为它会为您提供它在 PATH 中找到的任何 emacs 可执行文件。我注意到您和答案使用来自两个不同位置的 emacs:S

标签: elisp


【解决方案1】:

这就是我如何包装你的例程以获得你想要的东西。

注意:我确实将例程更改为简单地princ 字符串,而不是将它们插入缓冲区。

#!/usr/local/bin/emacs --script

(require 'cl)
(defun gen-row (lst)
  (mapcar (lambda (elm)
            (princ (concat "<tr><td>" elm "</td></tr>")))
          lst))

(defun parse-csv-line (txt)
  (princ "\n<table>\n")
  (gen-row (split-string txt ","))
  (princ "\n</table>\n"))

; (parse-csv-line "this,is,a test")

(defun run-it (&optional argv)
  (with-temp-buffer
    (if argv
        (find-file (car argv))
      (condition-case nil
          (let ((line (read-from-minibuffer "")))
            (while line
              (insert line)
              (insert "\n")
              (setq line (read-from-minibuffer ""))))
        (error nil)))

    ;; the current buffer has the file contents (or stdin contents)
    ;; now process each line
    (goto-char (point-min))
    (while (< (point) (point-max))
      (parse-csv-line (buffer-substring (point) (progn (end-of-line) (point))))
      (forward-line 1)
      (beginning-of-line 1))))

(run-it argv)

如果您要对表格进行更多的处理,将输入作为列表进行操作以获取所需内容然后使用 xmlgen 包生成所有 HTML 标记可能会更容易。

【讨论】:

  • 从来没想过要查看 wiki,Emacs info 页面的 --script 非常缺乏。我已经更新了我的脚本来处理这种情况。
  • 每一行都包含在自己的 <table> 中,但这对我来说已经足够了。谢谢。
猜你喜欢
  • 2011-12-23
  • 2017-10-10
  • 2018-08-08
  • 2016-06-12
  • 1970-01-01
  • 2012-10-26
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多