Parsing Haskell解释写入文件的文本类型
将文字类型实现(ClientCore)写入文件。使用Parsing Haskell解释写入文件的文本类型,parsing,haskell,types,Parsing,Haskell,Types,将文字类型实现(ClientCore)写入文件。使用readFile返回字符串。分离此字符串并返回单个ClientCore类型的最简单方法是什么?这里有点挣扎(注意:Haskell初学者脚湿了) {-#语言重载字符串,DeriveGeneric} 导入系统.IO 导入数据.Text 导入数据.Aeson 导入Web.Scotty 进口GHC.仿制药 将限定数据.ByteString.Lazy导入为BL 导入控制 导入数据。Monoid(()) 数据ClientCore=ClientCore{cl
readFile
返回字符串
。分离此字符串
并返回单个ClientCore
类型的最简单方法是什么?这里有点挣扎(注意:Haskell初学者脚湿了)
{-#语言重载字符串,DeriveGeneric}
导入系统.IO
导入数据.Text
导入数据.Aeson
导入Web.Scotty
进口GHC.仿制药
将限定数据.ByteString.Lazy导入为BL
导入控制
导入数据。Monoid(())
数据ClientCore=ClientCore{clId::Int
,clName::String
,clCore::String
,clClass::Int
}派生(显示,通用)
parseReadClientCore getFile=未定义
constructClientData::String->String->String->String->String->ClientCore
constructClientData clId“clName”clCore“clClass”=
ClientCore{clId=parse\u clId
,clName=clName'
,clCore=clCore'
,clClass=parseclclass
}
哪里
parse_clId=读取$clId'::Int
parse_clClass=读取$clClass'::Int
newClientCore::IO()
newClientCore=do
PUTSR“客户ID:”;clId是Show
的反义词,它允许您将一个字符串转换为一个ClientCore
我认为首先将文件分割成字符串,每个字符串代表一个ClientCore
,然后读取每个片段会更容易。最简单的方法是在写入文件时,在每次之后添加一个换行符,然后使用拆分文件。将Read
添加到派生
子句中,然后可以使用Read
或readsPrec
函数。好主意。我还没想到要逃走。
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
import System.IO
import Data.Text
import Data.Aeson
import Web.Scotty
import GHC.Generics
import qualified Data.ByteString.Lazy as BL
import Control.Applicative
import Data.Monoid ((<>))
data ClientCore = ClientCore { clId :: Int
, clName :: String
, clCore :: String
, clClass :: Int
} deriving (Show, Generic)
parseReadClientCore getFile = undefined
constructClientData :: String -> String -> String -> String -> ClientCore
constructClientData clId' clName' clCore' clClass' =
ClientCore { clId = parse_clId
, clName = clName'
, clCore = clCore'
, clClass = parse_clClass
}
where
parse_clId = read $ clId' :: Int
parse_clClass = read $ clClass' :: Int
newClientCore :: IO ()
newClientCore = do
putStr "Client ID: "; clId <- getLine
putStr "Name: "; clName <- getLine
putStr "Core business: "; clCore <- getLine
putStr "Classification: "; clClass <- getLine
postClientCore <- return (constructClientData clId clName clCore clClass)
appendFile "haskelltypes.txt" $ (show postClientCore)
readClientCore :: IO ()
readClientCore = do
getFile <- readFile "haskelltypes.txt"
return (parseReadClientCore getFile)