我有一个相当简单的问题,我很难过。基本上,我只需编写一个函数,它接受一个字符串,将其分成行,取第一行并返回格式正确的HTML标题标记中的第一行。
老实说,我不知道从哪里开始。
一切都会有所帮助。
我有代码,但这只是我用来对输入文件进行转换的一些基本功能:
convertToHTML :: String -> String
convertToHTML cs0 =
case cs0 of
('#' : '#' : cs) -> "<h2>" ++ cs ++ "</h2>"
('#' : cs) -> "<h1>" ++ cs ++ "</h1>"
"---" -> "<hr/>"
_ -> cs0
convertToHTML' :: String -> String
convertToHTML' = unlines.map (convertToHTML.firstLine.escapeChars).lines
convertToWords :: String -> String
convertToWords cs1 =
case cs1 of
('*' : '*' : cs) -> "<strong>" ++ cs ++ "</strong>"
('_' : '_' : cs) -> "<strong>" ++ cs ++ "</strong>"
('*' : cs) -> "<em>" ++ init cs ++ "</em>"
('_' : cs) -> "<em>" ++ init cs ++ "</em>"
_ -> cs1
convertToWords' :: String -> String
convertToWords' = unwords.map convertToWords.words
这些是我从main调用的基本函数,它读取输入文件,调用函数并生成输出文件。
main = do
args <- getArgs -- command line args
let (infile,outfile) = (\(x:y:ys)->(x,y)) args
putStrLn $ "Input file: " ++ infile
putStrLn $ "Output file: " ++ outfile
contents <- readFile infile
writeFile outfile $ deleteSymbol $ convertToWords' $ convertToHTML' $ contents
希望你能得到代码的要点。
答案 0 :(得分:2)
要检索第一行,您只需使用:
firstLine :: String -> String
firstLine = head . lines
然后你可以使用:
firstLineInTitleTags :: String -> String
firstLineInTitleTags s = concat ["<title>", firstLine s, "</title>"]
或:
firstLineInTitleTags :: String -> String
firstLineInTitleTags = ("<title>"++) . (++"</title>") . firstLine