summaryrefslogtreecommitdiff
path: root/sort-and-sanitize-the-other-kind-of-amex-export.hs
diff options
context:
space:
mode:
Diffstat (limited to 'sort-and-sanitize-the-other-kind-of-amex-export.hs')
-rw-r--r--sort-and-sanitize-the-other-kind-of-amex-export.hs30
1 files changed, 30 insertions, 0 deletions
diff --git a/sort-and-sanitize-the-other-kind-of-amex-export.hs b/sort-and-sanitize-the-other-kind-of-amex-export.hs
new file mode 100644
index 0000000..adeac06
--- /dev/null
+++ b/sort-and-sanitize-the-other-kind-of-amex-export.hs
@@ -0,0 +1,30 @@
+import Text.CSV
+import Text.Printf (printf)
+
+import Data.List (sort, isPrefixOf, groupBy)
+
+import System.Environment (getArgs)
+
+normAndInvertAmount :: Field -> Field
+normAndInvertAmount amt | amt == "" = ""
+ | otherwise = printf "%.2f" (0 - (read amt :: Double))
+
+compressWhitespace :: String -> String
+compressWhitespace x = map head $ groupSpaces x
+ where groupSpaces "" = [""]
+ groupSpaces x = groupBy (\x y -> x==' ' && y==' ') x
+
+massageAmount :: [Field] -> [Field]
+massageAmount [a,b,c,d,e,f,g,h,i,j] = [a,b,c,d,compressWhitespace e,f,g,h,i,normAndInvertAmount j]
+-- massageAmount [a,b,c,d,e,f,g,h] = [a,b,compressWhitespace c,d,e,f,g,normAndInvertAmount h]
+massageAmount xs = xs
+
+sanitySort :: [Record] -> [Record]
+sanitySort ts = map (massageAmount) (sort ts)
+
+main = do
+ args <- getArgs
+ result <- parseCSVFromFile (head args)
+ case result of
+ Left e -> putStrLn ("Parse fail: " ++ show e)
+ Right ts -> putStrLn $ printCSV (sanitySort ts)