2014-12-03 75 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