Skip to content

Instantly share code, notes, and snippets.

@minddnim
Created December 19, 2013 11:26
Show Gist options
  • Save minddnim/8037815 to your computer and use it in GitHub Desktop.
Save minddnim/8037815 to your computer and use it in GitHub Desktop.
import Data.Attoparsec.ByteString.Char8 as AP
import Data.ByteString.Char8 as B
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 <- pID
char ','
level <- pLevel
char ','
musicTitle <- pMusicTitle
char ','
bmsID <- pBmsID
char ','
orgArtist <- pOrgArtist
char ','
scoreSite <- pScoreSite
char ','
comment <- pComment
char ','
char ']'
return $ MusicData (read $ B.unpack iD) (B.unpack level) (B.unpack musicTitle) (read $ B.unpack bmsID) (B.unpack orgArtist) (B.unpack scoreSite) (B.unpack 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