Skip to content

Instantly share code, notes, and snippets.

@papamitra
Forked from minddnim/parser.hs
Last active December 31, 2015 20:09
Show Gist options
  • Save papamitra/8037954 to your computer and use it in GitHub Desktop.
Save papamitra/8037954 to your computer and use it in GitHub Desktop.
import Data.Attoparsec.ByteString.Char8 as AP
import Data.ByteString.Char8 as B
import Control.Applicative
data MusicData = MusicData {
dID :: Integer,
dLevel :: String,
dMusicTitle :: String,
dBmsID :: Integer,
dOrgArtist :: String,
-- orgArtistURL :: ByteString,
dScoreSite :: String,
-- scoreSiteURL :: ByteString,
dComment :: String
} deriving (Show)
pMusicData :: Parser MusicData
pMusicData = do
char '['
iD <- B.unpack <$> pID
char ','
level <- B.unpack <$> pLevel
char ','
musicTitle <- B.unpack <$> pMusicTitle
char ','
bmsID <- B.unpack <$> pBmsID
char ','
orgArtist <- B.unpack <$> pOrgArtist
char ','
scoreSite <- B.unpack <$> pScoreSite
char ','
comment <- B.unpack <$> pComment
char ','
char ']'
return $ MusicData (read iD) level musicTitle (read bmsID) orgArtist scoreSite comment
pID :: Parser ByteString
pID = AP.takeWhile $ notInClass ","
pLevel :: Parser ByteString
pLevel = do
char '"'
level <- AP.takeWhile $ notInClass "\""
char '"'
return level
pMusicTitle :: Parser ByteString
pMusicTitle = do
char '"'
musicTitle <- AP.takeWhile $ notInClass "\""
char '"'
return musicTitle
pBmsID :: Parser ByteString
pBmsID = do
char '"'
bmsID <- AP.takeWhile $ notInClass "\""
char '"'
return bmsID
pOrgArtist :: Parser ByteString
pOrgArtist = do
char '"'
orgArtist <- AP.takeWhile $ notInClass "\""
char '"'
return orgArtist
pScoreSite :: Parser ByteString
pScoreSite = do
char '"'
scoreSite <- AP.takeWhile $ notInClass "\""
char '"'
return scoreSite
pComment :: Parser ByteString
pComment = do
char '"'
comment <- AP.takeWhile $ notInClass "\""
char '"'
return comment
main :: IO ()
main = print $ parseOnly pMusicData (B.pack "[61,\"<font color='red'>◎1</font>\",\"reikon girl@Genso-kyo (NORMAL7)\",\"120135\",\"\",\"<a href='http://cid-578814acc2bd5a74.skydrive.live.com/browse.aspx/.Public/BMS'>sun3</a>\",\"\",],")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment