Skip to content

Instantly share code, notes, and snippets.

@brabadu
Created January 28, 2013 22:36
Show Gist options
  • Save brabadu/4659955 to your computer and use it in GitHub Desktop.
Save brabadu/4659955 to your computer and use it in GitHub Desktop.
Trying clojure for doing small things. Generate CSV-file from bunch of lines.
Company 123
Sales One
Account Two
-------
Company 456
Sales Er
Account zxcv
-------
Company 33
Sales CVC
Account ADfasdf
-------
Company 654
Sales DSfadfas
Account Vljflsd
-------
Company 999
Sales 1
Account 2
-------
Company 543
Sales lkjads
Account zxcv
-------
Company 123 Sales One Account Two
Company 456 Sales Er Account zxcv
Company 33 Sales CVC Account ADfasdf
Company 654 Sales DSfadfas Account Vljflsd
Company 999 Sales 1 Account 2
Company 543 Sales lkjads Account zxcv
user=> (ns namespace (:use clojure-csv.core))
nil
namespace=> (def text (slurp "/Users/brabadu/projects/clojure-csv-write/companies.txt"))
#'namespace/text
namespace=> text
"Company 123\nSales One\nAccount Two\n-------\nCompany 456\nSales Er\nAccount zxcv\n-------\nCompany 33\nSales CVC\nAccount ADfasdf\n-------\nCompany 654\nSales DSfadfas\nAccount Vljflsd\n-------\nCompany 999\nSales 1\nAccount 2\n-------\nCompany 543\nSales lkjads\nAccount zxcv\n-------"
namespace=> (clojure.string/split text #"\n")
["Company 123" "Sales One" "Account Two" "-------" "Company 456" "Sales Er" "Account zxcv" "-------" "Company 33" "Sales CVC" "Account ADfasdf" "-------" "Company 654" "Sales DSfadfas" "Account Vljflsd" "-------" "Company 999" "Sales 1" "Account 2" "-------" "Company 543" "Sales lkjads" "Account zxcv" "-------"]
namespace=> (partition 4 (clojure.string/split text #"\n"))
(("Company 123" "Sales One" "Account Two" "-------") ("Company 456" "Sales Er" "Account zxcv" "-------") ("Company 33" "Sales CVC" "Account ADfasdf" "-------") ("Company 654" "Sales DSfadfas" "Account Vljflsd" "-------") ("Company 999" "Sales 1" "Account 2" "-------") ("Company 543" "Sales lkjads" "Account zxcv" "-------"))
namespace=> (map (partial take 3) (partition 4 (clojure.string/split text #"\n")))
(("Company 123" "Sales One" "Account Two") ("Company 456" "Sales Er" "Account zxcv") ("Company 33" "Sales CVC" "Account ADfasdf") ("Company 654" "Sales DSfadfas" "Account Vljflsd") ("Company 999" "Sales 1" "Account 2") ("Company 543" "Sales lkjads" "Account zxcv"))
namespace=> (write-csv (map (partial take 3) (partition 4 (clojure.string/split text #"\n"))))
"Company 123,Sales One,Account Two\nCompany 456,Sales Er,Account zxcv\nCompany 33,Sales CVC,Account ADfasdf\nCompany 654,Sales DSfadfas,Account Vljflsd\nCompany 999,Sales 1,Account 2\nCompany 543,Sales lkjads,Account zxcv\n"
namespace=> (def csv (write-csv (map (partial take 3) (partition 4 (clojure.string/split text #"\n")))))
#'namespace/csv
namespace=> (spit "result.csv" csv)
nil
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment