class FileHandler: import string def clearFeatures (self): # blank out all Casting Polymers features name_ = '' madeBy_ = '' website_ = '' class_ = '' polymer_ = '' type_ = '' mixRatio_ = '' potLife_ = '' demoldTime_ = '' size_ = '' weight_ = '' price_ = '' viscosity_ = '' hardness_ = '' specificVolume_ = '' color_ = '' shrinkage_ = '' elongation_ = '' tearStrength_ = '' compStrength_ = '' tensileStrength_ = '' return name_, madeBy_, website_, class_, polymer_, \ type_, mixRatio_, potLife_, demoldTime_, size_, \ weight_, price_, viscosity_, hardness_, specificVolume_, \ color_, shrinkage_, elongation_, tearStrength_, compStrength_, \ tensileStrength_ def closeFile (self): # close open file self.file.close () def getBetween (self, startString, endString): # get section of line delimited by startString and endString # get first delimiter loc = self.locate (startString) # check for not found and return if loc == -1: return -1 # now check for end delimiter string = self.getUntil (endString) #print 'fileHandler: string, endString: ', string, ' ', endString # check for not found and return if string == -1: return -1 # string found return string def getLine (self): # get next line self.line = self.file.readline () # check for end of file return if self.line == '': return -1 # check to see if there is an end flag if self.endFlag: if self.endFlag in self.line: return -1 #replace return char with blank self.line = self.line.replace ('\r', ' ') # replace tab char with blank self.line = self.line.replace ('\t', ' ') self.col = 0 def getNext (self, noChars): # get next noChars characters string = '' start = self.col end = self.col + noChars while 1: line = self.line.rstrip ('\n') eol = len (line) if end < eol + 1: # pick up string and return string = string + line [start: end] self.col = end return string else: # pick up current string then get another line string = string + line [start: eol] end -= eol y = self.getLine () if y == -1: return -1 #replace return char with blank self.line = self.line.replace ('\r', ' ') # replace tab char with blank self.line = self.line.replace ('\t', ' ') start = 0 def getPrevious (self, noChars): # get previous noChars # do not change column location self.col # note that this only goes back to the begining of the # current line # start location # note that self.col is already one beyond # a previously searched field start = self.col - (noChars + 1) # check for no less than 0 if start < 0: start = 0 return self.line [start: self.col - 1] def getUntil (self, delimit): # get next field from the current location until # delimit string string = '' start = self.col while 1: # remove controls at end of line line = self.line.rstrip ('\n') line = line.rstrip ('\r') line = line.rstrip ('\t') eol = len (line) - 1 #print '\nfileHandler eol, line: ', eol,' ',line loc = line.find (delimit, start) if loc == -1: # pick up current string then get another line string = string + line [start: eol] y = self.getLine () if y == -1: return -1 #replace return char with blank #self.line = self.line.replace ('\r', ' ') # replace tab char with blank #self.line = self.line.replace ('\t', ' ') start = 0 else: # pick up string and return string = string + line [start: loc] self.col = loc + len (delimit) return string def locate (self, string): # Find string. Read more lines if needed # and flag = 1. while 1: loc = self.line.find (string, self.col) if loc == -1: y = self.getLine () if y == -1: return -1 if self.line == '': return -1 #replace return char with blank self.line = self.line.replace ('\r', ' ') # replace tab char with blank self.line = self.line.replace ('\t', ' ') self.col = 0 continue self.col = loc + len (string) return loc def openFile (self, fileName, ioFlag='r', endFlag=''): # open a file for input or output self.file = open (fileName,ioFlag) # note - first line read has been removed # set endFlag self.endFlag = endFlag def openURL (self, URLname, endFlag=''): import urllib # open URL for reading self.file = urllib.urlopen (URLname) self.endFlag = endFlag y = self.getLine () if y == -1: return -1 def readPolymers (self): # pick up data for the next polmer from sequential file # if this comes right after open, then the first record # has been read in name_, madeBy_, website_, class_, polymer_, \ type_, mixRatio_, potLife_, demoldTime_, size_, \ weight_, price_, viscosity_, hardness_, specificVolume_, \ color_, shrinkage_, elongation_, tearStrength_, compStrength_, \ tensileStrength_ = self.clearFeatures () while 1: self.getLine () # end file ?? if self.line == '': name = '' break # check for end block if self.line.startswith ('---'): break # bypass count info if self.line.startswith ('count:'): continue # check for name_ if self.line.startswith ("name:"): loc = self.line.index (':')+1 name_ = self.line [loc:].rstrip ().lstrip () continue # check for madeBy_ if self.line.startswith ("madeBy:"): loc = self.line.index (':')+1 madeBy_ = self.line [loc:].rstrip ().lstrip () continue # check for website_ if self.line.startswith ("website:"): loc = self.line.index (':')+1 website_ = self.line [loc:].rstrip ().lstrip () continue # check for class_ if self.line.startswith ("class:"): loc = self.line.index (':')+1 class_ = self.line [loc:].rstrip ().lstrip () continue # check for polymer_ if self.line.startswith ("polymer:"): loc = self.line.index (':')+1 polymer_ = self.line [loc:].rstrip ().lstrip () continue # check for type_ if self.line.startswith ("type:"): loc = self.line.index (':')+1 type_ = self.line [loc:].rstrip ().lstrip () continue # check for mixRatio_ if self.line.startswith ("mixRatio:"): loc = self.line.index (':')+1 mixRatio_ = self.line [loc:].rstrip ().lstrip () continue # check for potLife_ if self.line.startswith ("potLife:"): loc = self.line.index (':')+1 potLife_ = self.line [loc:].rstrip ().lstrip () continue # check for demoldTime_ if self.line.startswith ("demoldTime:"): loc = self.line.index (':')+1 demoldTime_ = self.line [loc:].rstrip ().lstrip () continue # check for size_ if self.line.startswith ("size:"): loc = self.line.index (':')+1 size_ = self.line [loc:].rstrip ().lstrip () continue # check for weight_ if self.line.startswith ("weight:"): loc = self.line.index (':')+1 weight_ = self.line [loc:].rstrip ().lstrip () continue # check for price_ if self.line.startswith ("price:"): loc = self.line.index (':')+1 price_ = self.line [loc:].rstrip ().lstrip () continue # check for viscosity_ if self.line.startswith ("viscosity:"): loc = self.line.index (':')+1 viscosity_ = self.line [loc:].rstrip ().lstrip () continue # check for hardness_ if self.line.startswith ("hardness:"): loc = self.line.index (':')+1 hardness_ = self.line [loc:].rstrip ().lstrip () continue # check for specificVolume_ if self.line.startswith ("specificVolume:"): loc = self.line.index (':')+1 specificVolume_ = self.line [loc:].rstrip ().lstrip () continue # check for color_ if self.line.startswith ("color:"): loc = self.line.index (':')+1 color_ = self.line [loc:].rstrip ().lstrip () continue # check for shrinkage_ if self.line.startswith ("shrinkage:"): loc = self.line.index (':')+1 shrinkage_ = self.line [loc:].rstrip ().lstrip () continue # check for elongation_ if self.line.startswith ("elongation:"): loc = self.line.index (':')+1 elongation_ = self.line [loc:].rstrip ().lstrip () continue # check for tearStrength_ if self.line.startswith ("tearStrength:"): loc = self.line.index (':')+1 tearStrength_ = self.line [loc:].rstrip ().lstrip () continue # check for compStrength_ if self.line.startswith ("compStrength:"): loc = self.line.index (':')+1 compStrength_ = self.line [loc:].rstrip ().lstrip () continue # check for tensileStrength_ if self.line.startswith ("tensileStrength:"): loc = self.line.index (':')+1 tensileStrength_ = self.line [loc:].rstrip ().lstrip () continue return name_, madeBy_, website_, class_, polymer_, \ type_, mixRatio_, potLife_, demoldTime_, size_, \ weight_, price_, viscosity_, hardness_, specificVolume_, \ color_, shrinkage_, elongation_, tearStrength_, compStrength_, \ tensileStrength_ def rewind (self): # positon at start of file # doesn't work for URLs ?? self.file.seek (0) def setEndFlag (self, endFlag): # set "endFlag" to be used as end of section marker self.endFlag = endFlag def writePolymers (self,count, \ name_, madeBy_, website_, class_, polymer_, \ type_, mixRatio_, potLife_, demoldTime_, size_, \ weight_, price_, viscosity_, hardness_, specificVolume_, \ color_, shrinkage_, elongation_, tearStrength_, compStrength_, \ tensileStrength_ ,printFlag=False): # write polmer data "record" into a file temp = 'count: ' + str (count) + '\n' if printFlag: print temp self.file.write (temp) if name_: temp = 'name: ' + name_ + '\n' if printFlag: print temp self.file.write (temp) if madeBy_: temp = 'madeBy: ' + madeBy_ + '\n' if printFlag: print temp self.file.write (temp) if website_: temp = 'website: ' + website_ + '\n' if printFlag: print temp self.file.write (temp) if class_: temp = 'class: ' + class_ + '\n' if printFlag: print temp self.file.write (temp) if polymer_: temp = 'polymer: ' + polymer_ + '\n' if printFlag: print temp self.file.write (temp) if type_: temp = 'type: ' + type_ + '\n' if printFlag: print temp self.file.write (temp) if mixRatio_: temp = 'mixRatio: ' + mixRatio_ + '\n' if printFlag: print temp self.file.write (temp) if potLife_: temp = 'potLife: ' + potLife_ + '\n' if printFlag: print temp self.file.write (temp) if demoldTime_: temp = 'demoldTime: ' + demoldTime_ + '\n' if printFlag: print temp self.file.write (temp) if size_: temp = 'size: ' + size_ + '\n' if printFlag: print temp self.file.write (temp) if weight_: temp = 'weight: ' + weight_ + '\n' if printFlag: print temp self.file.write (temp) if price_: temp = 'price: ' + price_ + '\n' if printFlag: print temp self.file.write (temp) if viscosity_: temp = 'viscosity: ' + viscosity_ + '\n' if printFlag: print temp self.file.write (temp) if hardness_: temp = 'hardness: ' + hardness_ + '\n' if printFlag: print temp self.file.write (temp) if specificVolume_: temp = 'specificVolume: ' + specificVolume_ + '\n' if printFlag: print temp self.file.write (temp) if color_: temp = 'color: ' + color_ + '\n' if printFlag: print temp self.file.write (temp) if shrinkage_: temp = 'shrinkage: ' + shrinkage_ + '\n' if printFlag: print temp self.file.write (temp) if elongation_: temp = 'elongation: ' + elongation_ + '\n' if printFlag: print temp self.file.write (temp) if tearStrength_: temp = 'tearStrength: ' + tearStrength_ + '\n' if printFlag: print temp self.file.write (temp) if compStrength_: temp = 'compStrength: ' + compStrength_ + '\n' if printFlag: print temp self.file.write (temp) if tensileStrength_: temp = 'tensileStrength: ' + tensileStrength_ + '\n' if printFlag: print temp self.file.write (temp) temp = '---' + '\n' if printFlag: print temp self.file.write (temp)