I want to replace a string from an input file with a different string. I was searching for a method but it seems i can only alter the string character by character. For example in the my code below
replace :: String -> String
replace [] = []
replace (x:xs) = if x == '@' then 'y':replace xs --y is just a random char
else x:replace xs
searching :: String -> IO String
searching filename = do
text <- readFile filename
return(replace text)
main :: IO ()
main = do
n <- searching "test.sf"
writeFile "writefile.html" n
I want to find the first occurrence of the string "@title", but i cant seem to find a method to do so as mentioned before, i can only access the char '@'. Is there a method for doing such a task.
You can use Data.List.Utils replace, it's lazy and you can process a big file with some like:
main = getContents >>= putStr . replace "sourceString" "destinationString"
That's all!
A possible replace function could be
rep a b s@(x:xs) = if isPrefixOf a s
-- then, write 'b' and replace jumping 'a' substring
then b++rep a b (drop (length a) s)
-- then, write 'x' char and try to replace tail string
else x:rep a b xs
rep _ _ [] = []
another smart way (from Data.String.Utils)
replace :: Eq a => [a] -> [a] -> [a] -> [a]
replace old new l = join new . split old $ l
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With