Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #r "ExcelProvider.1.0.1/lib/net45/ExcelProvider.Runtime.dll"
  2. open FSharp.Interop.Excel
  3. open System.Text.RegularExpressions;
  4.  
  5. type Excel = ExcelFile<"input.xls", Range="A7:I100000">
  6. type Row = {
  7. Amount : decimal;
  8. Title : string;
  9. }
  10.  
  11. let file = Excel()
  12.  
  13. let rows =
  14. file.Data
  15. |> Seq.map (fun row -> {Amount = decimal row.Kwota; Title = row.``Tytuł operacji``})
  16.  
  17. let cleanRows =
  18. rows
  19. |> Seq.where (fun row -> (not (isNull row.Title)))
  20. |> Seq.map (fun row -> {
  21. row
  22. with Title =
  23. (
  24. Regex.Replace(row.Title, @"[\d-]", "")
  25. |> fun title -> Regex.Replace(title, ",", "")
  26. |> fun title -> if title.Length > 38
  27. then title.Substring(38)
  28. else title
  29. )
  30. }
  31. )
  32.  
  33. let groups =
  34. cleanRows
  35. |> Seq.groupBy (fun r -> r.Title)
  36. |> Seq.map (fun r -> (fst r, (snd r) |> Seq.sumBy (fun r -> r.Amount)))
  37.  
  38.  
  39. let expenses =
  40. groups
  41. |> Seq.where(fun row -> snd row < 0m)
  42. |> Seq.map(fun row -> (fst row, -(snd row)))
  43. |> Seq.sortByDescending (snd)
  44.  
  45. expenses
  46. |> Seq.iter (fun(t, a) -> printf "%s, %M" t a)
  47.  
  48. let csv =
  49. expenses
  50. |> Seq.map (fun(t, a) -> sprintf "%s, %M" t a)
  51.  
  52. System.IO.File.WriteAllLines("output.csv", csv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement