繁体   English   中英

Haskell操纵文件内容

[英]Haskell manipulating file contents

我是来自葡萄牙的学生对我必须处理的项目有些怀疑。

我的最终目标是使用LaTeX创建一个pdf目录,该目录使用exiftool存储有关文件的信息。

到目前为止,我已经设法将音频与视频文件分开,并将他们的exiftool'ed信息存储在一个文件中,但它将它们增加了。

例如:

======== 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

任何人都可以给我一个提示吗? 我想在我创建的文件结构上存储一些信息,但首先,我需要通过歌曲将其拆分,然后选择我想要的,对吧?

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

PS:我不习惯haskell(刚开始)

最小的修复是:

import Text.Regex

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

箭头从monadic值中提取一个值 - 来自ma类型的值,其中m是monad, a是任意类型。 readFile返回splitRegex值(类型为IO String ),但splitRegex接受String类型的普通值。 所以箭头可被用来提取一StringIO String 但是splitRegex返回一个非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=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM