2014-12-03 53 views
1

我有一个关于Haskell中的一些基本转换的问题。 基本上,我有一个书面的输入文件,名为Input.md。这包含一些在我的项目文件中读取的降价文本,我想编写几个函数来对文本进行转换。在一个名为convertToHTML的函数下完成这些函数后,我已经以正确的格式将该文件输出为.html文件。读取Input.md文件并输出.html文件Haskell

module Main 
(
convertToHTML, 
main 
) where 

import System.Environment (getArgs) 
import System.IO 
import Data.Char (toLower, toUpper) 

process :: String -> String 
process s = head $ lines s 


convertToHTML :: String -> String 
convertToHTML str = do 
    x <- str 
    if (x == '#') 
    then "<h1>" 
    else return x 
     --convertToHTML x = map toUpper x 

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 $ convertToHTML contents 

所以,

  1. 我怎么会在我输入文件读取和转换以#开始到HTML标记
  2. 我怎么会在我输入文件再次读取任何行并将由_word_(1下划线)包围的任何WORD转换为另一个html标记
  3. 用HTML字符串替换任何字符。

我尝试使用诸如Map,Filter,ZipWith等函数,但无法弄清楚如何遍历文本并转换每个文本。如果任何人有任何建议请。我一直在为此工作了两天,并且有一些失败的代码显示了几个星期,并有一堆失败的代码显示它。

回答

0

我试过使用诸如Map,Filter,ZipWith等函数,但无法弄清楚如何遍历文本并转换每个文本。

因为他们在适当的元素集合上工作。他们并不真正“重复”;你只需提供适当的数据。作为一个例子,我们来解决#问题。

我们的档案是一个巨大的String,我们想要的是将它很好地分成几行,所以[String]。有什么可以为我们做?我不知道,所以我们只需search Hoogle for String -> [String]

啊,我们去吧,lines功能!它的副本unlines也会很有用。现在,我们可以写我们这行的包装:

convertHeader :: String -> String 
convertHeader [] = [] -- that prevents us from calling head on an empty line 
convertHeader x = if head x == '#' then "<h1>" ++ x ++ "</h1>" 
            else x 

等:

convertHeaders :: String -> String 
convertHeaders = unlines . map convertHeader . lines 
--    ^String ^[String]   ^[String] ^String 

正如你所看到的功能首先将文件行,每行映射convertHeader,并且会将文件回一起。

See it live on Ideone

现在尝试做同样与words取代您的格式设置模式。作为奖励练习,更改convertHeader以计算线路前面的#的数量,并相应地输出<h1>,<h2><h3>等等。

+0

不知道如何将响应指向你的。哈哈,但我在下面发布了回复。 – KimCheeFatChoyProgrammer 2014-12-04 07:45:33

+0

嘿,我想知道你是否能让我开始使用单词和单词进行单词转换。我一直在经历一些试验和错误代码,但我不知道在我的代码中使用函数的位置。我已经尝试了复制convertHeader和convertHeaders格式,并且也尝试过守卫。但是没有任何东西可以解决我的问题 – KimCheeFatChoyProgrammer 2014-12-05 07:57:47