(ns su.gornostaev.rstatfr2csv
(:use [clojure.xml :only (parse)])
(:use [clojure.string :only [index-of join split]])
(:use [clojure.java.io])
(:import java.io.File))
(defn parse-cmd
[args]
(when-let [file-name (first args)]
file-name))
(defn parse-file
[file-name]
(if (nil? file-name) nil (parse (File. file-name))))
(defn format-datetime
[dt]
(let [[date time] (split dt #"\s")]
(str (join "." (reverse (split date #"\."))) " " (subs time 0 (index-of time \:)) ":00")))
(defn merge-counters
[counters]
(map
(fn [item]
(let [[k & v] item]
(assoc (reduce (fn [acc val] (merge-with + acc val)) (first v)) :dt k)))
(reduce
(fn [acc val]
(let [{:keys [dt in out]} val]
(update-in acc [dt] (fnil #(conj % {:in in :out out}) []))))
{} counters)))
(defn parse-counters
[sensor]
(map
(fn [counter]
{:dt (format-datetime (:datetime (:attrs counter)))
:in (read-string (:realin (:attrs counter)))
:out (read-string (:realout (:attrs counter)))})
sensor))
(defn parse-sensors
[shop]
(map
(fn [sensor]
{:name (:name (:attrs sensor)) :counters (merge-counters (parse-counters (:content sensor)))})
shop))
(defn parse-shops
[dom]
(map
(fn [shop]
{:name (:name (:attrs shop)) :sensors (seq (parse-sensors (:content shop)))})
dom))
(defn parse-doc
[doc]
(parse-shops
(->>
doc
:content
first
:content)))
(defn save-csv
[data]
(with-open [w (writer (file "output.csv"))]
(doseq [shop data]
(doseq [sensor (:sensors shop)]
(doseq [counter (:counters sensor)]
(.write w (str (join "\t" (concat [(:name shop) (:name sensor)] (vals (into (sorted-map) counter)))) "\n")))))))
(save-csv (parse-doc (parse-file (parse-cmd *command-line-args*))))
class BaseHandler(tornado.web.RequestHandler):
def get_template_namespace(self):
ns = super(BaseHandler, self).get_template_namespace()
ns.update({
'static_srv': 'static.domain.ru',
})
return ns
var xhr = new XMLHttpRequest();
xhr.open("POST", '/some-url', true)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send("param_name=param_val");
def simple_ajax(request):
if request.method == 'POST':
print(request.POST.get('param_name'))
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Iterator;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class DateFormatDemo {
private static final Map<String, String> months;
static {
months = new HashMap<String, String>();
months.put("янв", "01");
months.put("фев", "02");
months.put("мар", "03");
months.put("апр", "04");
months.put("май", "05");
months.put("июн", "06");
months.put("июл", "07");
months.put("авг", "08");
months.put("сен", "09");
months.put("окт", "10");
months.put("ноя", "11");
months.put("дек", "12");
}
private static String changeFormat(String in) {
int startPosition = in.indexOf('-');
if(startPosition != -1) {
int endPosition = in.indexOf('-', startPosition + 1);
if(endPosition != -1) {
String strMonth = in.substring(startPosition + 1, endPosition);
if(months.containsKey(strMonth)) {
String intMonth = months.get(strMonth);
return in.replace(strMonth, intMonth);
}
}
}
throw new IllegalArgumentException("Invalid date format");
}
public static void main(String[] args) throws FileNotFoundException, IOException {
if(args.length < 1) {
System.err.println("Missing filename!");
return;
}
InputStream in = new FileInputStream(args[0]);
HSSFWorkbook wb = new HSSFWorkbook(in);
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> it = sheet.iterator();
Spliterator<Row> spliterator = Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED);
Stream<Row> stream = StreamSupport.stream(spliterator, false);
stream
.map(r -> r.getCell(1).getStringCellValue())
.filter(s -> s.length() > 0)
.map(DateFormatDemo::changeFormat)
.forEach(System.out::println);
}
}