Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
37
Task/Text-processing-2/Clojure/text-processing-2.clj
Normal file
37
Task/Text-processing-2/Clojure/text-processing-2.clj
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
(defn parse-line [s]
|
||||
(let [[date & data-toks] (str/split s #"\s+")
|
||||
data-fields (map read-string data-toks)
|
||||
valid-date? (fn [s] (re-find #"\d{4}-\d{2}-\d{2}" s))
|
||||
valid-line? (and (valid-date? date)
|
||||
(= 48 (count data-toks))
|
||||
(every? number? data-fields))
|
||||
readings (for [[v flag] (partition 2 data-fields)]
|
||||
{:val v :flag flag})]
|
||||
(when (not valid-line?)
|
||||
(println "Malformed Line: " s))
|
||||
{:date date
|
||||
:no-missing-readings? (and (= 48 (count data-toks))
|
||||
(every? pos? (map :flag readings)))}))
|
||||
|
||||
(defn analyze-file [path]
|
||||
(reduce (fn [m line]
|
||||
(let [{:keys [all-dates dupl-dates n-full-recs invalid-lines]} m
|
||||
this-date (:date line)
|
||||
dupl? (contains? all-dates this-date)
|
||||
full? (:no-missing-readings? line)]
|
||||
(cond-> m
|
||||
dupl? (update-in [:dupl-dates] conj this-date)
|
||||
full? (update-in [:n-full-recs] inc)
|
||||
true (update-in [:all-dates] conj this-date))))
|
||||
{:dupl-dates #{} :all-dates #{} :n-full-recs 0}
|
||||
(->> (slurp path)
|
||||
clojure.string/split-lines
|
||||
(map parse-line))))
|
||||
|
||||
(defn report-summary [path]
|
||||
(let [m (analyze-file path)]
|
||||
(println (format "%d unique dates" (count (:all-dates m))))
|
||||
(println (format "%d duplicated dates [%s]"
|
||||
(count (:dupl-dates m))
|
||||
(clojure.string/join " " (sort (:dupl-dates m)))))
|
||||
(println (format "%d lines with no missing data" (:n-full-recs m)))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue