读取Input.md文件并输出.html文件Haskell

读取Input.md文件并输出.html文件Haskell,html,haskell,character,converter,Html,Haskell,Character,Converter,我有一个关于Haskell中一些基本转换的问题。 基本上,我有一个书面输入文件,名为Input.md。这包含一些在我的项目文件中读取的标记文本,我想编写一些函数来对文本进行转换。在一个名为convertToHTML的函数下完成这些函数之后,我以正确的格式将文件输出为.html文件 module Main ( convertToHTML, main ) where import System.Environment (getArgs) import System.IO import Data.C

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

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
主模块
(
转换为HTML,
主要的
)在哪里
导入System.Environment(getArgs)
导入系统.IO
导入Data.Char(toLower、toUpper)
进程::字符串->字符串
进程s=头$s行
convertToHTML::String->String
convertToHTML str=do
x
我尝试使用诸如Map、Filter、ZipWith之类的函数,但不知道如何迭代文本并转换每个文本

因为它们处理适当的元素集合。它们并不是真正的“迭代”;您只需输入适当的数据。让我们以
#
问题为例

我们的文件是一个巨大的
字符串
,我们想要的是把它很好地分成几行,所以
[String]
。你能为我们做些什么?我不知道,所以我们就这样吧

啊,好了,功能!它的对应项,
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
如您所见,函数首先将文件转换为行,在每行上映射
convertHeader
,然后将文件放回一起


现在尝试对
单词执行相同的操作,以替换格式设置模式。作为奖励练习,更改
convertHeader
以计算行前
#
的数量,并相应地输出
等等。

还不确定如何引导您的响应。哈哈,但我在下面贴了一个回复。嘿,我想知道你是否可以让我开始使用单词和unwords进行单词转换。我已经经历了一些尝试和错误代码,但我只是不知道在哪里使用我的代码中的函数。我尝试了复制convertHeader和convertHeaders格式,还尝试了guards。但对我来说一切都不顺利
convertHeaders :: String -> String
convertHeaders = unlines . map convertHeader . lines
--              ^String   ^[String]         ^[String] ^String