2017-05-16 1 views
-2

programmation Haskell comment utiliser readFile J'utilise getLine mais il devrait réagir avec un utilisateur pour chaque commande Mais je dois lire les lignes de fichier texte et le processus de la ligne d'entréehaskell readFile de fichier ligne par ligne

text <- readFile "input.txt" 
let linii = lines text 
interact (unlines . (map calculate) . linii) 

Répondre

0

Donc interact est de faire IO en utilisant stdin et stdout. Si au lieu de stdin que vous souhaitez utiliser un fichier pour l'entrée, c'est bien vous pouvez utiliser la fonction readFile que vous faites déjà:

applyOnFileLines :: FilePath -> (String -> String) -> IO() 
applyOnFileLines filePath func = do 
    file <- readFile filePath 
    putStr . unlines 
     . map func 
     . lines 
     $ file 
+0

pourrait tout aussi bien supprimer la notation 'do' ici puisque nous » Je travaille déjà principalement avec la composition de la fonction: 'applyOnFileLines filePath f = putStr = << unlines. carte f. lignes <$> readFile filePath'. Je pense aussi qu'il vaudrait mieux que 'applyOnFileLines' prenne ses arguments dans l'autre ordre,' f' avant 'filePath'. Permet une lecture plus claire et une meilleure application partielle. – amalloy

+0

Assez juste, je l'ai écrit comme ça en pensant que ce serait plus facile pour OP. Sinon, si vous aimez un style plus * sans point *, quelque chose comme ça pourrait marcher: 'onLinesToFile func = (putStr.unlines.fonction func.lines = <<). readFile' –

+0

Merci u, mais vraiment je ne suis pas bon dans Haskell, s'il vous plaît envoyez-moi un fichier est prêt à fonctionner, y compris la fonction et où placer et comment appeler cette fonction d'une autre fonction –