1

GHCI で関数 intervalFinder をテストしているときは動作しているように見えますが、コンパイルしようとすると出力がありません。

関数は入力に対して機能します。

*Main> intervalFinder $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.emp
ty]
Loading package bytestring-0.9.2.1 ... linking ... done.
["Start Time: first","End   Time: second","Start Time: third","End   Time: third
"]

そして実行中のメイン:

*Main> main
Loading package bytestring-0.9.2.1 ... linking ... done.
*Main> :q
Leaving GHCi.

results.txt に出力:

Start Time: firstEnd   Time: secondStart Time: thirdEnd   Time: third 

しかし、ghc test3.hs を実行すると、出力ファイルは 0kb になります (明らかにデータはありません!)

私は何か間違ったことをしていますか?

コード:

{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as Bl
import System.IO 
import System.Environment


intervalFinder :: [B.ByteString]->[B.ByteString]
intervalFinder x = helper x ""
    where
    helper (x:xs) "" 
        | x /= ""   = ((B.append (B.pack("Start Time: ")) x)):(helper xs x)
        | otherwise = helper xs ""
    helper (x:xs) y
        | x == ""   = ( (B.append (B.pack("End   Time: ")) y)):(helper xs "")
        | otherwise = helper xs x
    helper _ _      = []

main = do
    filehandle <- openFile "result.txt" WriteMode
    Bl.hPutStr (filehandle) .  Bl.fromChunks . intervalFinder $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.empty]

ありがとう!

4

1 に答える 1

3
main = do
    filehandle <- openFile "result.txt" WriteMode
    Bl.hPutStr (filehandle) .  Bl.fromChunks . intervalFinder
          $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.empty]

出力はバッファリングされるため、プログラムは、コンパイルされたバイナリをrunghc使用して、またはコンパイルされたバイナリを使用してバッファをフラッシュせずに終了します。ghciでは、ghciが終了するとすべてのバッファーがフラッシュされます¹。

openFileファイルハンドルを使用する場合は、使用後に使用する必要がありますhClose。また、書き込みモードまたは追加モードで開かれている場合は、出力バッファーもフラッシュされます。

main = do
    filehandle <- openFile "result.txt" WriteMode
    Bl.hPutStr (filehandle) .  Bl.fromChunks . intervalFinder
          $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.empty]
    hClose filehandle

または、writeFile

main = Bl.writeFile "result.txt" $ Bl.fromChunks ...

¹私はそれを100%確信しているわけではありませんが、経験はそれをサポートしています。

于 2012-08-30T20:35:16.450 に答える