Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #r "ExcelProvider.1.0.1/lib/net45/ExcelProvider.Runtime.dll"
- open FSharp.Interop.Excel
- open System.Text.RegularExpressions;
- type Excel = ExcelFile<"input.xls", Range="A7:I100000">
- type Row = {
- Amount : decimal;
- Title : string;
- }
- let file = Excel()
- let rows =
- file.Data
- |> Seq.map (fun row -> {Amount = decimal row.Kwota; Title = row.``Tytuł operacji``})
- let cleanRows =
- rows
- |> Seq.where (fun row -> (not (isNull row.Title)))
- |> Seq.map (fun row -> {
- row
- with Title =
- (
- Regex.Replace(row.Title, @"[\d-]", "")
- |> fun title -> Regex.Replace(title, ",", "")
- |> fun title -> if title.Length > 38
- then title.Substring(38)
- else title
- )
- }
- )
- let groups =
- cleanRows
- |> Seq.groupBy (fun r -> r.Title)
- |> Seq.map (fun r -> (fst r, (snd r) |> Seq.sumBy (fun r -> r.Amount)))
- let expenses =
- groups
- |> Seq.where(fun row -> snd row < 0m)
- |> Seq.map(fun row -> (fst row, -(snd row)))
- |> Seq.sortByDescending (snd)
- expenses
- |> Seq.iter (fun(t, a) -> printf "%s, %M" t a)
- let csv =
- expenses
- |> Seq.map (fun(t, a) -> sprintf "%s, %M" t a)
- System.IO.File.WriteAllLines("output.csv", csv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement