2012-03-27 3 views
1

haskell.it로 작성된 완전한 기능의 프로그램은 명령 행 인수에 문제가 있습니다. 입력하는 경우 :haskell의 redact 프로그램에서 다중 인수

고양이 poem.txt |

그것은 단지 당신이

고양이 poem.txt를 작성하는 경우 단어 1

수정하는 절차를 밟 word3 단어 1의 word2을 편집하다 | 편집하다 "단어 1 word2 word3"그것은이 아마 내가 명령 줄 인수했던 실수의 일종입니다 ... 3 단어 수정하는 절차를 밟

는 ... 여기

module Main where 

import System 
import Data.Char 
import Data.Bits 

convertWord :: Eq a=> [a] -> String 
convertWord = map (const '*') 

lowercase :: [Char]->[Char] 
lowercase ch = map toLower ch 

redact :: String -> String -> String 
redact text keywords = unlines(map unwords redactedtext) 
     where redactedtext = map processed text1 
       text1  = map words (lines text) 
       processed = map tobeconverted 
       keywords1 = words keywords 
       tobeconverted x | lowercase x `elem` map lowercase keywords1  = convertWord x 
           | otherwise          = x 


main = do 
    text <- getContents 
    (key:_) <- getArgs 
    let 
      result = redact text key 




    putStr (result) 

답변

9

요점은 이것입니다 내 코드입니다 :

(key:_) <- getArgs 

여기서 첫 번째 인수 이외의 모든 것을 명시 적으로 무시합니다. 이 방법은, 당신의 편집하다 기능이 실제로 쉽게 비트를 얻을 수 있음을

keys <- getArgs 
let result = redact text keys 

참고 : 편집하다 기능은 키워드 목록을 원하시면

, 당신은 당신이 getArgs에서 얻을 인수의 전체 목록을 전달할 수 단어를 분리 할 필요가 없기 때문입니다. 또한 인수가 없을 때 중단되지 않기 때문에 전체 프로그램이 안전 해집니다.

+0

정말 고마워, 그게 총체적인 감각을 만들었 어 ... 나는 그것을 바꿨다. – user1295012

+0

그 답을 수락 한 것으로 표시해야합니다 :) –