2012-01-10 6 views
0

私は2つのライブラリ(audio.lhsまたはvideo.lhs)のうちの1つを選択し、指定されたカテゴリで順序付けられフィルタリングされたリストを持つpdfを返すプログラムを作成しています。Haskell:入力値を使用してフィルタリングとソート

mymain = do {putStrLn "What do you wanna search, Video or Audio?"; 
      tipo <- getLine; 
      if tipo == "Audio" 
      then do { 
      a <- readFile "audio.lhs" ; 
      let text = splitEvery 7 (splitRegex (mkRegex "\t") a) 
       list = map musicFile text 
       select = filter ((>1000) .size) list 
       orderList = sortBy (comparing title) 
       dir = Dir orderList 
       hs = "import Dir\nimport TeX\nimport System.Cmd" 
        ++ "\ntoTeX= do { writeFile \"out.tex\" $ prettyprint dat ;" 
        ++ "system \"pdflatex out\"}" 
        ++ "\ndat=" 
        ++ show dir 
      in do { writeFile "dat.hs" hs ; 
        putStrLn "\nOk.\nNow load \'dat.hs\' and run \'toTeX\'\n" 
       }}... 

すべてが実行されているが、今、私はその機能

select = filter ((>1000) .size) list 

orderList = sortBy (comparing title) 

代わりにWの必要私が与えた値を使って釣り合っていると、プログラムのユーザーが選択した値で作業したいので、> 2000または< 500のファイルをフィルタリングしたい場合は、サイズまたはタイトルまたは別のもの。

私のデータ構造は

data File = File { 
filename :: String , 
size :: Int , 
filetype :: String , 
copyright :: String , 
title :: String , 
artist :: String , 
year :: String } deriving Show 

musicFile :: [String] -> File 
musicFile [name, size, tipo, copy, title, artist, year] = File name (read size) tipo copy title artist year 

任意の助けを喜んでいただければ幸いです。

ありがとうございます。

+1

あなたはすでに 'getLine'でユーザー入力を利用しています。それはあなたが今したいこととどのように違うのですか?何を試しましたか? –

+0

私は 'getLine'を使ってみましたが、整数を与えるときには理解できません。また、' getLine'値フィルタを持つ変数を使用しているときに、彼らが待っているものではないので失敗します。 – seph

+2

私たちはここでペアプログラミングをしています:-)あなたは過去2日間にこのプログラムに関する4つの質問をしました。私はスタックオーバーフローが正しい場所であるかどうかはわかりません - 代わりに[Haskell IRCチャンネル](http://www.haskell.org/haskellwiki/IRC_channel)を代わりに使用しますか? –

答えて

2

文字列を解析するためにハスケルで利用できる最も単純なメカニズムはRead typeclassです。このクラスのインスタンスを使用すると、入力から(Readのインスタンスである)Intを読みにあなたの方法を始めるために十分であるべきそのどちらも

read :: (Read a) => String -> a 
readLn :: (Read a) => IO a 

を実装するための十分な機能を持っています。

+0

ねえダニエルは、整数を読み込むについて私はこの問題は、IOを使用するチュートリアルについては、「>」や「<」 – seph

+2

@sephである 'のgetInt :: IO Int' 'のgetInt = readLn' で出てきました(そして様々な他のモナドも)、sigfpeの優れた記事の1つを選んでください:[気にしない人のためのIO Monad](http://blog.sigfpe.com/2007/11/io-monad-for-people 「あなたはすでにモナドを発明していたかもしれません」(http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and-whit-done.html) .html)。 –

+0

ありがとう、私はそれを見てみましょう。 – seph

関連する問題