【发布时间】:2014-07-23 17:59:37
【问题描述】:
我知道这个标题有很多问题,但我无法从他们那里得到答案,所以就这样吧。
我是一位经验丰富的程序员,但对 Clojure 来说还很陌生。我正在尝试通过将 RTF 文件转换为 HTML 文件然后调用 html 解析器来解析它。
我使用的转换器 (unrtf) 总是打印到标准输出,所以我需要捕获输出并自己编写文件。
(定义解析-rtf “使用 unrtf 解析 rtf 文件” [#^java.io.InputStream istream 字符集] (让 [rtffile (File/createTempFile "parse" ".rtf" (File."/vault/tmp/")) htmlfile (File/createTempFile "parse" ".ohtml" (File. "/vault/tmp/")) 命令(str“/usr/bin/unrtf” (.getPath rtffile) ) ] (尝试 (with-open [rtfout(FileOutputStream.rtffile)] (IOUtils/复制 istream rtfout)) (let [ proc (.exec (Runtime/getRuntime) 命令) ostream (.getInputStream 过程) 结果(.waitFor proc)] (如果(> 结果 0) ( (println "unrtf failed" 命令结果) ;抛出异常会导致记录解析失败 (throw (Exception. (str "RTF to HTML conversion failed"))) ) ( (with-open [htmlout (FileOutputStream.htmlfile)] (IOUtils/copy ostream htmlout)) ;因为我们现在有了 html,所以通过 html 解析器运行它 (parse-html (FileInputStream.htmlfile) 字符集) ) ) ) (最后 (.删除 rtf 文件) (.delete html文件) ) )))异常指向带有
的行(IOUtils/copy ostream htmlout))
这真的让我很困惑,因为我之前使用过这种形式(就在尝试之后:),而且那里似乎还可以。我看不出有什么区别。
感谢您提供的任何帮助。
【问题讨论】:
-
您错误地使用了括号。特别是您的 if 语句是错误的。括号不是花括号。当您有一个额外的对时,您将内部表达式作为函数调用。你想要
(if condition something something-else),你有(if condition (something) (something-else))。
标签: clojure