1

誰かが私のためにこのコードを clojure に変換できますか

BufferedReader br = new BufferedReader(new FileReader(args[0]));

                // Read in first line, if nothing, inputString is null
                String inputString = br.readLine(); // First line is header
                inputString = br.readLine();
    while (inputString != null) {

        rowCount++;
    }

recur を使用する必要があることは理解していますが、ファイルから読み取りを行っており、行数は不変の値であるため、while ループで値が増加し続けるように増加するにはどうすればよいでしょうか。

4

2 に答える 2

2

ファイル内の行数だけが必要な場合は、次のようにすることができます。

(defn count-lines[file]
  (with-open [r (clojure.java.io/reader file)]
  (count (line-seq r))))

または、各行で何かをしたい場合 (たとえば、印刷):

(defn count-lines[file]
   (with-open [r (clojure.java.io/reader file)]
    (loop [i 1
          s (line-seq r)]
          (println (first s))
          (if (seq (rest s))
           (recur (inc i) (rest s)) i))))
于 2013-01-02T05:26:22.407 に答える
0
(defn read-lines [file]
  (clojure.string/split-lines (slurp file)))

; count the number of lines
(count (read-lines "c:/test.log"))

; returns a list of indexed lines
(map-indexed vector (read-lines "c:/test.log"))
;[[0 "Line 1"]
; [1 "Line 2"]
; [2 "Line 3"]
;  ...]
于 2013-01-08T14:51:19.183 に答える