首页 > 解决方案 > Clojure 打开一个大的 txt 文件编辑数据并将其写入一个新文件

问题描述

我正在尝试打开一个太大而无法啜饮的文件。然后我想编辑文件以删除除数字以外的所有字符。然后将数据写入新文件。

到目前为止我有
(: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"))))    

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

标签: clojure

解决方案


看起来您只需要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会保持不变。我可能会选择这种方法,因为它将您的“流”处理保持在一起,并且您的命令式/副作用循环只关心编写它的输入。


推荐阅读