fork download
  1. import Data.List
  2.  
  3. splitComma l = let
  4. sep w = let ( a, b ) = span ( /= ',') w in
  5. if b == "" then Nothing else Just (a,tail b)
  6. in unfoldr sep $ l ++ ","
  7.  
  8. parse contents = let
  9. ls = lines contents
  10. readLine = splitComma
  11. in sort $ map readLine ls
  12.  
  13. disp dat = let
  14. gps = groupBy ( \x y -> head x == head y ) dat
  15. toJrec rec = concat [
  16. "{\"製品タイプ\":", show ( rec !! 0 ),
  17. ", \"製品ID\":", show ( rec !! 1 ),
  18. ", \"製品色\":", show ( rec !! 2 ),
  19. "}" ]
  20. in map toJrec $ map transpose $ transpose gps
  21.  
  22. main = do
  23. contents <- ( return . disp . parse ) =<< getContents
  24. mapM_ putStrLn $ contents
  25.  
Success #stdin #stdout 0s 5476KB
stdin
B,02,B
C,04,Y
F,15,R
E,12,C
C,06,G
D,07,B
D,08,B
D,10,M
C,05,C
F,14,G
A,01,Y
D,09,B
B,03,C
G,16,M
E,11,Y
E,13,B
stdout
{"製品タイプ":["A","B","C","D","E","F","G"], "製品ID":["01","02","04","07","11","14","16"], "製品色":["Y","B","Y","B","Y","G","M"]}
{"製品タイプ":["B","C","D","E","F"], "製品ID":["03","05","08","12","15"], "製品色":["C","C","B","C","R"]}
{"製品タイプ":["C","D","E"], "製品ID":["06","09","13"], "製品色":["G","B","B"]}
{"製品タイプ":["D"], "製品ID":["10"], "製品色":["M"]}