【问题标题】:Read An Input.md file and output a .html file Haskell读取一个 Input.md 文件并输出一个 .html 文件 Haskell
【发布时间】:2014-12-03 08:24:24
【问题描述】:

我有一个关于 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

所以,

  1. 如何阅读我的输入文件,并将任何以 # 开头的行转换为 html 标记
  2. 如何再次通读输入文件并将_word_(1 个下划线)包围的任何 WORD 转换为另一个 html 标记
  3. 用 html 字符串替换任何字符。

我尝试使用 Map、Filter、ZipWith 等功能,但不知道如何遍历文本并转换每个文本。请如果有人有任何建议。我已经连续工作了 2 天,并且有一堆失败的代码要显示几个星期,并且有一堆失败的代码要显示它。

【问题讨论】:

    标签: html haskell character converter


    【解决方案1】:

    我尝试使用 Map、Filter、ZipWith 等函数,但不知道如何遍历文本并转换每个文本。

    因为他们在适当的元素集合上工作。他们并没有真正“迭代”;您只需提供适当的数据。让我们以# 问题为例。

    我们的文件是一个巨大的String,我们想要将它很好地分成几行,所以[String]。能为我们做什么?我不知道,所以我们就search Hoogle for String -&gt; [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更改为计算行前#的数量并相应地输出&lt;h1&gt;&lt;h2&gt;&lt;h3&gt;等。

    【讨论】:

    • 不确定如何直接回复您的。哈哈,但我在下面发布了回复。
    • 嘿,我想知道你是否可以让我开始使用 word 和 unwords 进行单词转换。我一直在经历一些试验和错误代码,但我只是不知道在哪里使用我的代码中的函数。我尝试过复制 convertHeader 和 convertHeaders 格式,也尝试过警卫。但对我来说没有任何效果
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2021-01-23
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多