Using the tinycdb index files.
import msparser
import sys
import re
def main() :
version = "1.1"
sourceFile = sys.argv[0]
cdbname = sys.argv[0] + '.cdb'
cdb = msparser.ms_tinycdb(cdbname, version, sourceFile)
if not cdb.isValid() :
showErrors(cdb)
return 1
if not cdb.openIndexFile(1) :
if cdb.isPossibleToCreate() :
print("Creating file because: %s" % cdb.getLastErrorString())
cdb.prepareToCreate()
cdb.saveValueForKey("Hello", "world")
cdb.saveValueForKey("HELP", "me")
cdb.saveValueForKey("HELP", "me too")
try :
fh = open(sys.argv[0], 'r')
except IOError as err:
errno, strerror = err.args
print("Cannot open " + sys.argv[0] + " for reading: " + strerror)
return 1
sys.exit(1)
line_nr = 1
for line in fh :
if re.search('\s*# and saves an.*', line) :
break
line_nr += 1
fh.close();
cdb.saveIntForKey("Line", line_nr)
cdb.finishCreate()
if cdb.isValid() :
print("Retrieving value for Hello : %s" % cdb.getValueFromKey("Hello"))
print("Retrieving 1st value for HELP : %s" % cdb.getValueFromKey("HELP", 0))
print("Retrieving 2nd value for HELP : %s" % cdb.getValueFromKey("HELP", 1))
try :
fh = open(sys.argv[0], 'r')
except IOError as err:
errno, strerror = err.args
print("Cannot open " + sys.argv[0] + " for reading: " + strerror)
return 1
line_nr = cdb.getIntFromKey("Line")
i = 1
for line in fh :
if i == line_nr : break
i += 1
print("Testing line index. Line " + str(line_nr + 1) + " : " + line)
fh.close()
else :
showErrors(cdb)
def showErrors(obj) :
err = obj.getErrorHandler()
for i in range(1, 1 + err.getNumberOfErrors()) :
print("Error number: %d (%d times): %s" % (err.getErrorNumber(i), err.getErrorRepeats(i) + 1, err.getErrorString(i)))
print(" ")
obj.clearAllErrors()
if __name__ == "__main__" :
sys.exit(main())