daily pastebin goal
22%
SHARE
TWEET

Untitled

a guest Oct 12th, 2017 48 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.Char(isSpace)
  2.  
  3. -- splitOnTest (=='x') "AxBxC" -> ["A", "B", "C"]
  4. splitOnTest :: (Char -> Bool) -> String -> [String]
  5. splitOnTest = splitOnTest' []
  6.   where splitOnTest' :: String -> (Char -> Bool) -> String -> [String]
  7.         splitOnTest' acc _ [] = [(reverse acc)]
  8.         splitOnTest' acc f (x:xs) | f x = [(reverse acc)] ++ splitOnTest f xs
  9.                                   | otherwise = splitOnTest' (x:acc) f xs
  10.  
  11. -- splitOn 'x' "AxBxC" -> ["A", "B", "C"]
  12. splitOn :: Char -> String -> [String]
  13. splitOn ch = splitOnTest (==ch)
  14.  
  15. -- strip " A  " -> "A"
  16. strip :: String -> String
  17. strip = reverse . dropWhile isSpace . reverse . dropWhile isSpace
  18.  
  19. stringList :: [String] -> [(String, [Float])]
  20. stringList s = stringList' [] $ map (map strip) $ map (splitOn ',') s
  21.   where stringList' acc []     = reverse acc
  22.         stringList' acc (x:xs) = stringList' ((s, ns):acc) xs
  23.           where (s:ns') = x
  24.                 ns      = map (read :: String -> Float) ns'
  25.  
  26. testData = ["Adam, 3, 5, 2.3",
  27.             "George, 20, 50.3, 100.0"]
  28.  
  29. main = putStrLn $ unlines $ map show $ stringList testData
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top