From 03cc372eac638f066800c45d6929b2b50701f36e Mon Sep 17 00:00:00 2001 From: pin Date: Wed, 7 Jul 2010 11:40:22 +0000 Subject: [PATCH] =?utf8?q?refactoring=20:=20ajout=20d'un=20d=C3=A9corateur?= =?utf8?q?=20pour=20lire=20des=20donn=C3=A9es=20sans=20chager=20la=20posit?= =?utf8?q?ion=20de=20lecture=20dans=20le=20fichier.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@274 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/minwii/logfilereader.py | 55 +++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/src/minwii/logfilereader.py b/src/minwii/logfilereader.py index 29425f7..a08855a 100755 --- a/src/minwii/logfilereader.py +++ b/src/minwii/logfilereader.py @@ -15,6 +15,14 @@ import pygame SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0' +def inplaceread(m) : + def readinplace(self, *args, **kw) : + self.savePos() + ret = m(self, *args, **kw) + self.recallPos() + return ret + return readinplace + class LogFileReader(object) : """ classe utilitaire pour l'accès aux données d'un fichier de log MinWii. @@ -29,93 +37,80 @@ class LogFileReader(object) : else : self.logfile = logfile + self.__pos = 0 + firstline = self.next() assert firstline == SUPPORTED_FILE_HEADER - + def savePos(self) : + self.__pos = self.logfile.tell() + self.logfile.seek(0) + + def recallPos(self) : + self.logfile.seek(self.__pos) + + @inplaceread def getSongFile(self) : "retourne le chemin d'accès au fichier musicxml de la chanson" - f = self.logfile - pos = f.tell() - - f.seek(0) for l in self : if l.startswith('APP chanson :') : break songfile = l.split(':', 1)[1].strip() - f.seek(pos) return songfile + @inplaceread def getSoundFontFile(self) : "retourne le chemin d'accès au fichier de la soundfont (*.sf2)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV soundfont :') : break soundFontFile = l.split(':', 1)[1].strip() - f.seek(pos) return soundFontFile - + + @inplaceread def getBank(self) : "retourne le paramètre bank du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP bank :') : break - f.seek(pos) bank = l.split(':', 1)[1].strip() return int(bank) + @inplaceread def getPreset(self) : "retourne le paramètre preset du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP preset :') : break - f.seek(pos) preset = l.split(':', 1)[1].strip() return int(preset) + @inplaceread def getScreenResolution(self) : "retourne la résolution écran (tuple de deux entiers)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV résolution écran :') : break screenResolution = eval(l.split(':', 1)[1].strip()) - f.seek(pos) return screenResolution + @inplaceread def getMode(self) : "retourne le niveau de difficulté" - f = self.logfile - pos = f.tell() for l in self : if l.startswith('APP mode :') : break mode = l.split(':', 1)[1].strip() - f.geek(pos) return mode + @inplaceread def getFirstEventTicks(self) : "retourne le timecode du premier événement (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('EVT ') : break firstTicks = int(l.split(None, 2)[1]) - f.seek(pos) return firstTicks def __del__(self) : -- 2.20.1