Clojure откройте большой текстовый файл, отредактируйте данные и запишите их в новый файл. - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь открыть файл, который слишком большой, чтобы хлебать. Я хочу затем отредактировать файл, чтобы удалить все символы, кроме цифр Затем запишите данные в новый файл.

Пока у меня есть
(: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 голосов
/ 03 мая 2018

Похоже, вам просто нужно изменить значение 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, и поскольку map и line-seq являются ленивыми, вы получите то же самое поведение ленивый / по требованию:

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

И тогда ваш doseq останется прежним. Я бы, вероятно, выбрал этот подход, поскольку он объединяет обработку вашего «потока», а ваш цикл императив / побочный эффект касается только записи его входных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...