vorherige Seite | 1 2 |
Gepostet: |
|||||||||||
> if isInclude s -- kann ich 'isInclude' mit "#include" ersetzen ?? Einfach durch s == "#include" ersetzen wird nicht reichen, weil deine Zeile ja irgendwie so aussieht: "#include andere_datei.k". Du könntest dort Data.List.isPrefixOf benutzen, das deckt dann aber nicht unterschiedliche Groß-/Kleinschreibung ab (falls das wichtig sein sollte). Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
Brauche wieder Hilfe | ||||||||||
Hallo, habe ein wenig herum Probiert aber komme jetzt nicht weiter: Auf der Webseite :http://www.crsr.net/Programming_Languages/SoftwareTools/ch3.html , ist genau das was ich suche. Mit ein paar Änderungen habe ich mir folgendes gebastelt : module Inc where import System.IO includin kk = do h <- pre kk finclude h putStr "Fertig" pre fn = mustopen fn ReadMode cat [] = return () cat (f:fs) = do includin f cat fs -- finclude :: Handle -> IO () finclude :: Handle -> IO () finclude h = do text <- hGetContents h mapM_ doLine $ lines text where -- doLine :: String -> IO () doLine lin = if first == "#include" then do h' <- mustopen (dequote second) ReadMode finclude h' hClose h' else do appendFile "todo.txt" (lin ++ "\n") putStrLn lin where (first, second) = twoWords $ words lin dequote :: String -> String dequote ('"':s) | (last s) == '"' = init s dequote s = s -- mustopen :: String -> IOMode -> IO Handle mustopen :: [Char] -> IOMode -> IO Handle mustopen fn mode = openFile fn mode `catch` printError where printError = error $ fn ++ ": cannot open file" close :: Handle -> IO () close = hClose --twoWords :: [String] -> (String, String) twoWords :: [[Char]] -> ([Char], [Char]) twoWords (a:b:_) = (a,b) twoWords _ = ("",""); und mit dem Programm :q.hs module Main where import System import Inc main = do args <- getArgs cat args wird mein Inc Modul aufgerufen. Soweit so gut ;Nun habe ich zwei Fragen : Wo füge ich sinnvollerweise : IF (doesFileExist "todo.txt") then removeFile "todo.txt" else Nixtun. Dies funkzt nicht da verschieden Bool /IO Bool Typen (??) Aber ich wollte die temporäre Datei erst löschen und dann neu schreiben. UND ich komme mit dem Main.hs von kaos nicht zu recht.Im main-modul weren mit argv <- getArgs die Eingabeparameter abgefragt Wo ist der beste Punkt in das Inc modul zu wechseln? Theoretisch ist mir es klar! es muß nur noch der DateiName als [Char] her aber wo?? Herzlichen Dank newuser0815 |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hi! > Wo füge ich sinnvollerweise : IF (doesFileExist "todo.txt") then removeFile "todo.txt" else Nixtun. Kommt drauf an, ob du die Datei vor und/oder nach dem Verarbeiten löschen willst. Möglich wäre in der cat-Funktion:
Das danach Löschen müsste dann nach dem Lesen der todo-Datei geschehen, also im kaos-Modul. Cooler wäre natürlich, wenn die cat-Funktion direkt den Inhalt der temporären Datei zurückgibt, dann könntest du dir das Löschen komplett sparen. > Dies funkzt nicht da verschieden Bool /IO Bool Typen (??) Wo bekommst du hier ein Bool her? removeFile "..." ist vom Typ IO (), also muss der else-Zweig auch von diesem Typ sein. Und nichts tun wäre in dem Fall ein return (). Es gibt auch die Funktion when, das ist praktisch ein if ohne else-Zweig (für Monaden). > Wo ist der beste Punkt in das Inc modul zu wechseln? Theoretisch ist mir es klar! > es muß nur noch der DateiName als [Char] her aber wo?? Du musst dir aus den Parametern vom kaos-Modul die Eingabedatei heraussuchen und den String dann an die cat-Funktion übergeben. Irgendwo muss das Raussuchen im kaos-Modul schon implementiert sein, weil ja dort schon die Datei gelesen wird. Da steht dann vermutlich irgendwo sowas wie content <- getContents kaosFile und du müsstest deine cat-Funktion dort einfügen: cat [kaosFile] content <- getContents "todo.txt" So oder so ähnlich, hab dein Code jetzt nicht so auf die Schnelle komplett überschaut. ;-) Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
vorherige Seite | 1 2 |