2011-12-14 25 views
4

私は、ポルトガルの学生です。私は扱わなければならないプロジェクトについて疑問を抱いています。ハスケル操作ファイルの内容

私の最終的な目的は、exiftoolを使ってファイルに関する情報を保存するLaTeXでPDFカタログを作成することです。

これまでのところ、私はビデオファイルからオーディオを分離し、exiftoolの情報をファイルに保存することに成功しましたが、それらは膨大になっています。例えば

:私は何をしたいことはある

======== Cartoon Battle.mp3 
-ExifToolVersion=8.60 
-FileName=Cartoon Battle.mp3 
-Directory=. 
-FileSize=4.0 MB 
-FileModifyDate=2011:12:13 09:46:25+00:00 
-FilePermissions=rw-rw-r-- 
-FileType=MP3 
-MIMEType=audio/mpeg 
-MPEGAudioVersion=1 
-AudioLayer=3 
-AudioBitrate=320 kbps 
-SampleRate=48000 
-ChannelMode=Stereo 
-MSStereo=Off 
-IntensityStereo=Off 
-CopyrightFlag=False 
-OriginalMedia=False 
-Emphasis=None 
-ID3Size=113441 
-Title=Cartoon Battle 
-Artist=Kevin MacLeod 
-Year=2007 
-BeatsPerMinute=130 
-Genre=Unclassifiable 
-Comment=(iTunPGAP) 0 
-EncodedBy=iTunes v7.0.2.16 
-Comment=(iTunNORM) 000001F7 0000014B 00001DBD 00000B18 000154C8 00000780 00008169     00008180 00000780 00000780 
-Comment=(iTunSMPB) 00000000 00000210 00000A84 00000000004A606C 00000000 003DE780 00000000 00000000 00000000 00000000 00000000 00000000 
-Album=Far East 
-Composer=Kevin MacLeod 
-PictureFormat=JPG 
-PictureType=Other 
-PictureDescription= 
-Picture=(Binary data 91855 bytes, use -b option to extract) 
-DateTimeOriginal=2007 
-Duration=0:01:41 (approx) 
======== Comic Plodding.mp3 
-ExifToolVersion=8.60 
-FileName=Comic Plodding.mp3 
-Directory=. 
-FileSize=3.8 MB 
-FileModifyDate=2011:12:13 09:46:24+00:00 
-FilePermissions=rw-rw-r-- 
-FileType=MP3 
-MIMEType=audio/mpeg 
-MPEGAudioVersion=1 
-AudioLayer=3 
-AudioBitrate=320 kbps 
-SampleRate=44100 
-ChannelMode=Joint Stereo 
-MSStereo=Off 
-IntensityStereo=Off 
-CopyrightFlag=False 
-OriginalMedia=False 
-Emphasis=None 
-ID3Size=105099 
-EncoderSettings=Logic Pro 8.0.1 
-Comment=(iTunNORM) 000001AE 00000181 000026DF 0000365B 0001100A 00016CE5 00007D33  00007ECF 00010FF0 00016CE5 
-Comment=(iTunSMPB) 00000000 00000210 000009D6 000000000040DA1A 00000000 003ABCBC  00000000 00000000 00000000 00000000 00000000 00000000 
-Artist=Kevin MacLeod 
-Composer=Kevin MacLeod 
-Year=2008 
-Genre=Silent Film Score 
-PictureFormat=JPG 
-PictureType=Other 
-PictureDescription= 
-Picture=(Binary data 84880 bytes, use -b option to extract) 
-Album=Scoring - Silent Film: Dark 
-DateTimeOriginal=2008 
-Duration=0:01:36 (approx) 

: まず、ある種のリストのいくつかの種類で、そのファイル上の2つの曲を分割してみてください。 次に、FileName、Size、すべての情報など、ファイル内の情報の一部を取得してみてください。

これまでのところ、私はコードのこの作品を作ってみたが、それは修正イマイチ:

mymain = do{ 
    a <- readFile "audio.txt" ; -- file that has all the infos collected by exiftool 
    ml <- splitRegex (mkRegex "========") a ; -- I expect this to separate each song and place their corresponding information on a single string 

誰も私にヒントを与えることはできますか?私が作成したファイル構造に関する情報を保存したいのですが、まずは曲で分割して、必要なものをピックアップする必要があります。

私の悪いフランスのための助けと言い訳のためのTHanks!

PS:私はないですのhaskellするために使用される(ちょうど開始)

+3

何が問題になっているか教えていただけますか? – Marcin

答えて

6

最小限の修正である:

import Text.Regex 

main = do { 
    a <- readFile "audio.txt" ; 
    print $ splitRegex (mkRegex "========") a ; 
} 

矢印はモナド値から値を抽出する - タイプm aの値からmはモナド、aは任意の型です。 readFileは、(IO Stringの)モナド値を返しますが、splitRegexは、タイプStringのプレーン値を受け入れます。矢印はStringIO Stringから抽出するために使用できます。しかしsplitRegexは非モナド型の値を返しますので、<-は何も抽出できません。

私はIOコードと非IOコードにコードを分割し;{}なしの構文を使用することをお勧め:

import Text.Regex 

processData text = x where 
    x = splitRegex (mkRegex "========") y 
    y = text 
    ... 

main = do 
    a <- readFile "audio.txt" 
    print $ processData a 

だから、IOコードがdo<-を使用すると、非IOコードがwhereを使用します。および=

関連する問題