Hallo ich bin neu bei Haskell und ich habe Probleme, dieses Skript zu arbeiten. Dieses Skript liest Argumente von einer Befehlszeile ein und findet sie in einer separaten Textdatei.Suchen und Ersetzen von Wörtern mit Stern, in einer Textdateiausgabe
E.G: cat.txt | ./redact Haus große Katze (im Compiler)
Es redigiert bestimmte Wörter in einer Textdatei, indem sie sie durch Sterne (**) Sterne ersetzt. Die Anzahl der Sterne für jedes redigierte Wort sollte der Anzahl der Zeichen im Wort entsprechen.
module Main where
import System
import Data.Char
import Data.List
lowercase :: String -> String
lowercase = map toLower
main = do
arg1 <- getArgs
txt <- getContents
putStr (redact txt arg1)
redact :: String -> String -> String
redact input xWords = unlines [ work line | line <- lines input ]
where work line = unwords [ foo word | word <- words line ]
foo w | lowercase(w) == lowercase(xWords) = convertWord w 1
| otherwise = w
convertWord Eq a => [a] -> [a]
convertWord = map (const '*')
aber wenn ich versuche, dies zu kompilieren, gibt GHCi den Fehler:
redact.hs:13:38:
Couldn't match expected thye 'Char' with actual type '[Char]'
Expected type: String
Actual type: [String]
In the second argument of 'redact', namely 'arg1'
In the first of 'putStr', namely '<redact txt arg1>'
Failed, module loaded: none.
So ist der Code:
putStr (redact txt arg1)
das Problem verursacht.
Vielen Dank im Voraus für jede Hilfe und wenn Sie den Code in jedem Fall verbessern können, wäre das großartig.
EDIT:
ich so viele Argumente wie möglich eingeben möchten, spielt es keine Rolle, wie viele args Sie eingeben, habe ich versucht:
(arg1:arg2:arg3:arg4:arg5:_) <- getArgs
aber ich muss EXACT 5 args eingeben, Es sollte egal sein, wie viele Argumente ich eintrage. Ich dachte an eine Art Loop, aber ich bin mir nicht sicher?
Nochmals vielen Dank für Ihre Hilfe.
Laut dem Beispiel war die Verwendung von _all_ Argumenten das, was das OP eigentlich wollte. – leftaroundabout
@leftaroundabout: Hmm, richtig. Ich wurde durch die Benennung von "arg1" getäuscht. Naja, hoffentlich ist der Rest meines Rates hilfreich ... – ehird