Clojure打开一个大的txt文件编辑数据并将其写入新文件

时间:2018-05-03 10:46:02

标签: clojure

我试图打开一个大到傻瓜的文件。我想编辑该文件以删除除数字之外的所有字符。然后将数据写入新文件。

到目前为止,我有  (:require [clojure.java.io :as io])

(:require [clojure.string :as str])

:jvm-opts ["-Xmx2G"]

(with-open [rdr (io/reader "/Myfile.txt")
            wrt (io/writer "/Myfile2.txt")]
  (doseq [line (line-seq rdr)]
    (.write wrt (str line "\n"))))    

哪些读写,但我不确定编辑的最佳方式。非常感谢任何帮助。我对这门语言很陌生。

1 个答案:

答案 0 :(得分:3)

看起来您只需要在编写之前修改line值。如果要修改字符串以删除所有非数字字符,则正则表达式是一种非常简单的路径。您可以创建一个函数来执行此操作:

(defn numbers-only [s]
  (clojure.string/replace s #"[^\d]" ""))
(numbers-only "this is 4 words")
=> "4"

然后在您的示例中使用该函数:

(str (numbers-only line) "\n")

或者,你可以map numbers-only覆盖line-seq的输出,因为mapline-seq都是懒惰的,你会得到同样的懒惰/点播行为:

(map numbers-only (line-seq rdr))

然后你的doseq会保持不变。我可能会选择这种方法,因为它会将你的“流”处理放在一起,而你的命令/副作用循环只关注它的输入。