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

しかし、私はPythonにうんざりしているので、今Haskellを学んでいます。

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 に答える