2012-04-03 12 views
0

コマンドライン引数からファイルを取得し、そのファイルを1行ずつ読み込むhaskellプログラムを書く必要があります。私はこれにアプローチする方法が不思議だった、私は文字列としてコマンドラインの引数を取得し、openFileまたは何かにそれを解析する必要がありますか?私はかなりhaskellに新しいので、私はかなり失われています、どんな助けもありがとう!Haskell Reading stdinのファイル

答えて

8

はい、特定のファイルを引数として指定する場合は、引数を取得してopenFileに送信する必要があります。

System.Environment.getArgsは、引数をリストとして返します。

import System.Environment (getArgs) 
import System.IO (openFile, ReadMode, hGetContents) 

main = do 
     args <- getArgs 
     file <- openFile (head args) ReadMode 
     text <- hGetContents file 
     -- do stuff with `text` 

(NBそのコードがエラー回復を持っていません:あなたは、単一のファイルを読みたいのであればその後

import System.Environment (getArgs) 

main = do 
     args <- getArgs 
     print args 

$ ghc test_getArgs.hs -o test_getArgs 
$ ./test_getArgs 
[] 
$ ./test_getArgs arg1 arg2 "arg with space" 
["arg1","arg2","arg with space"] 

だから、同じようtest_getArgs.hsを与え、何をすべきか引数がなくてもargsが空の場合(headは失敗します)、ファイルが存在しない場合、または読み込めない場合はどうなりますか?)

+1

IO文字列の数を合計するにはどうすればよいでしょうか? – SNpn

+0

@SNpn、どの数字を合計しますか? (より多くの情報を与える必要があります) – huon

+0

申し訳ありませんが、ファイルに整数のリストが含まれています(1行に1つの整数を設定します)。ファイルを取得して整数を合計する必要があります。 sum(text) ' – SNpn

3

まず、getArgsを使用してコマンドライン引数を取得します。私は最初のものがあなたにとって最も興味深いと思います。次に、openFile関数を使用してファイルを開きます。最後に、開かれたファイルを行単位で読み込むには、hGetLineを使用します。