Archived:Persistência em PySymbian
Aquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.
Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)
Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)
Dados do artigo
Artigo
Tradução:
Originado de Persistent Storage in PySymbian
Por _katy_
Última alteração feita por hamishwillee
em 07 May 2013
A classe abaixo está encapsula um arquivo e32dbm em PySymbian, podendo ser usada como persistência.
import e32dbm
class PersistentStorage:
def __init__(self,filename):
try:
# Tenta abrir um arquivo existente
self.data = e32dbm.open(filename,"wf")
except:
# Falhou: Assume que o arquivo precisa ser criado
self.data = e32dbm.open(filename,"nf")
def SetValue(self,key,value):
if str(value) == value:
# Se o valor for uma String precisará de um tratamento especial
self.config[key] = "u\"%s\"" % value
else:
# Caso contrário simplesmente converte o valor para uma String
self.config[key] = str(value)
def GetValue(self,key):
try:
return eval(self.config[key])
except:
# Assume que o item ainda não existe, assim retorna o valor "None"
return None
def Close(self):
self.data.close()
Como usar o código
O código abaixo mostra como usar essa classe para persistência.
import appuifw
import persistentstorage
def Main():
# Cria um local para armazenamento
storage = PersistentStorage("e:\\config")
# Recupera a posição
position = storage.GetValue("position")
# Define um valor padrão caso não exita
if position == None:
position = (51.47,5.48)
# Solicita novos valores, mostrando o valor atual como padrão
latitude = appuifw.query(u"Latitude:","float",position[0])
longitude = appuifw.query(u"Longitude:","float",position[1])
# Se um novo valor for fornecido, este é gravado
if latitude != None and longitude != None:
storage.SetValue("position",(latitude,longitude))
storage.Close()
Main()
Oposições
O método PersistentStorage.SetValue() empacota uma string entre aspas para ter uma avaliação posterior com eval() apropriada. Entretanto, isso não funciona corretamente se você usar barras invertidas numa string. Basicamente você tem que duplicar cada barra invertida para ter uma resposta da função eval() correta. Para complementar, o código para fazer isso automaticamente será um exercício para o leitor.


(no comments yet)