3

我经常使用 Python 来替换文本中的各种类型的字符,使用如下所示的脚本:

#!/usr/bin/env python                                                                                                                                                                                                                                                         
# coding=UTF-8

import sys

for file in sys.argv[1:]:                                                                                                                                                                                                                                                     
    f = open(file)                                                                                                                                                                                                                                                            
    fs = f.read()
    r1 = fs.replace('\n',' ')
    r2 = r1.replace('\r',' ')                                                                                                                                                                                                                                                   
    r3 = r2.replace('. ','.\n\n')                                                                                                                                                                                                                                                   
    r4 = r3.replace('é','e')
    r5 = r4.replace('\xc2',' ')
    r6 = r5.replace('\xa0',' ')
    r7 = r6.replace(' ',' ')
    r8 = r7.replace(' ',' ')
    r9 = r8.replace('\n ','\n')
    f.close()                                                                                                                                                                                                                                                                 
    print r8

但是我现在正在学习 Haskell,因为我厌倦了 Python。

我在 Haskell 中最好的尝试是

#!/usr/bin/runhaskell 

import System.IO

main :: IO ()
main = do 
       inh <- getArgs >>= withFileLines
       outh <- -- ??
       mainloop inh outh
       hClose inh
       hClose outh

replacements :: String -> String
replacements = unwords $ map -- hmm....

...而且,我不知道从那里去哪里。

4

1 回答 1

5

Haskell 中最简单的方法包括在输入上映射一个Char -> Char替换函数(f如下),产生一个新的输出(该interact函数负责 fopen/fclose 模式):

main = interact $ map f
      where
        f '\n'   = ' '
        f '\r'   = ' '
        f 'é'    = 'e'
        f '\xa0' = ' '
        f c      = c

你可以修改它来做你自己的 IO,使用Text包等,但是字符转换的基本模式是一样的。

于 2012-05-26T22:28:19.420 回答