diff options
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.hs | 30 |
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) |