返回Haskell中String的第一行

时间:2014-12-10 02:47:42

标签: html haskell

我有一个相当简单的问题,我很难过。基本上,我只需编写一个函数,它接受一个字符串,将其分成行,取第一行并返回格式正确的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

希望你能得到代码的要点。

1 个答案:

答案 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