J'ai besoin de lire, modifier et ensuite mettre à jour certains fichiers dans la même fonction. La solution idéale (voir ci-dessous) ne pourrait pas fonctionner, c'est faux. La "pire" solution fonctionne.Le code le plus court pour lire un fichier, puis le mettre à jour?
-- Ex. "Pseudocode" - Doesn't work.
ideal = let pathFile = "C:\\TEMP\\Foo.txt"
in readFile pathFile >>= writeFile pathFile . (++ "!")
-- It works.
worst = do
let pathFile = "C:\\TEMP\\Foo.txt"
h <- openFile pathFile ReadMode
cs <- hGetContents h
(temp_Foo,temp_handle) <- openTempFile pathFile
hPrint temp_handle $ cs ++ "!"
hClose temp_handle
removeFile pathFile
renameFile temp_Foo pathFile
Je préférerais éviter "la solution de contournement simple mais laid" proposée par Reid Burton en 2010:
doit file = do
contents <- readFile file
length contents `seq` (writeFile file $ process contents)
est-il une meilleure solution?
Eh bien, vous pouvez avoir une solution de conduits/tuyaux. :) – Sibi
@Sibi Ces bibliothèques sont énormes. Je pense que cela demande beaucoup de temps pour être maîtrisé. Aussi, je ne pense pas à utiliser un canon pour tuer un moustique. –
@AlbertoCapitani vous n'avez pas besoin d'un canon pour tuer un moustique - mais vous n'avez pas non plus besoin d'un superordinateur (selon les normes des années 70) pour faire des appels téléphoniques. – leftaroundabout