2011-12-14 97 views
4

我是葡萄牙的一名学生,对我必须处理的一个项目有一些怀疑。Haskell操纵文件内容

我的最终目标是使用LaTeX创建一个使用exiftool存储文件信息的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) 

什么,我想要做的是: 首先,尝试在某种某种形式的名单上该文件的两首歌曲分成。 然后,尝试获取文件内的一些信息,例如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 

谁能给我一个提示?我想在我创建的File结构中存储一些信息,但首先,我需要按歌曲分割它,然后选取我想要的,对吧?

谢谢你的帮助,请原谅我的坏法!

PS:我不与用于Haskell的(刚刚开始)

+3

你能告诉我们什么问题? – Marcin 2011-12-14 14:05:18

回答

6

的最小修复程序是:

import Text.Regex 

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

箭头提取从一个monadic值的值 - 从m a类型的值m是一个monad,而a是一个任意类型。 readFile返回单值(类型为IO String),但splitRegex接受String类型的明文值。因此可以使用箭头从IO String中提取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=