REPERTOIRE TELEPHONIQUE AVEC FICHIER

cs_lepecheur Messages postés 35 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 octobre 2007 - 7 janv. 2005 à 11:29
glaza Messages postés 2 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 7 mai 2007 - 7 mai 2007 à 02:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28374-repertoire-telephonique-avec-fichier

glaza Messages postés 2 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 7 mai 2007
7 mai 2007 à 02:54
Merci LEPECHEUR.
Je reviens sur la question des caractères accentués. Sur la console, j'ai des problèmes. J'ai écrit un script; le libellé contient par exemple print"l'âge est: %s",%(age). La lettre 'â' de 'âge' est sortie bizarre sur la console à l'exécution du script. Alors explique-moi bien ton affaire de fichiers à déposer dans le répertoire de python pour éviter les problèmes d'accents. Pas à pas, S.v.p ! Je profite pour te demander pourquoi, à l'exécution d'un script, la console ne couvre pas tout le bureau, mais s'étend seulement sur la moitié et comment on fait pour effacer cette console comme on le faisait dans le vieux basic avec la commande CLS.

MERCI !
cs_lepecheur Messages postés 35 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 octobre 2007
5 mai 2007 à 12:34
Pour Glaza:
Je n'ai pas de problème avec l'ordre des informations. Chez moi, après les modifications qu'il faut apporter et qu'on verra après, tout est normal à ce niveau là. Peut-être s'agit il d'une erreur au moment de l'ajout des infos, ou un oubli de d'abord "actualiser".

Il y a par contre un affichage des caractères de fin de ligne qu'on évite comme celà:

dans affiche, ajouter [:-1] ==>

varP.set(liste[i][:-1])
varN.set(liste[i+1][:-1])
varT.set(liste[i+2][:-1])

Ainsi on n'affiche que jusqu'à l'avant dernier caractère.
Ex: si animal = "chat", animal[:-1]= "cha"

Pour le problème d'accents, il s'agit de problèmes d'encodages de chaînes et de fichiers. Pour le régler, il faut ajouter une ligne dans ce code, avant tout le reste:

# -*- coding:latin-1 -*-
(ceci s'occupe du programme qui tourne)
et créer un fichier sitecustomize.py à placer dans ...\Python2X\Lib\site-packages contenant les lignes

import sys
sys.setdefaultencoding('latin-1')

qui s'occupe entre autres du fichier que l'on utilise.

Bon courage !
glaza Messages postés 2 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 7 mai 2007
5 mai 2007 à 02:36
Salut !
La fonction sauve(fichier): pose problème comme LEPECHEUR l'a fait remarquer. suivant les conseils de ce dernier, j'ai carrément remplacé la variable fichier par un nom de fichier existant dans le repertoire. Regardez :

def sauve():
f = open('dina.txt','a')
prenom = entr1.get()
f.write(prenom + '\n')
nom = entr2.get()
f.write(nom + '\n')
telephone = entr3.get()
f.write(telephone + '\n')
f.close()
efface()
def transfert():
f = open('dina.txt','r')
j = 1
while j==1:
t = f.readline()
if t=='':
f.close()
j=0
else:
liste.append(t)
t = f.readline()
liste.append(t)
t = f.readline()
liste.append(t)

Je note un autre problème: lorsqu'on clique sur le bouton list, l'enregistrement qui s'affiche ne correspond pas aux libellés. Par exemple le champ: prénom prend le numéro de téléphone ! et on voit les marques de fin de ligne. Pourtant, ce code m'intéresse. Une autre remarque: les caractères accentués provoquent une erreur. J'ai essayé par exemple : Ouréga comme prénom. Si quelqu'un peut améliorer ce code... Je pense à LEPECHEUR. Moi, je suis encore novice en python. merci et salut !
msphp Messages postés 1 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 26 septembre 2005
26 sept. 2005 à 12:14
Salut je vous demande pardon à vous tous de ce long silence. En effet, j'ai changé de boite (societe de travail) depuis fin Janvier 2005. Comme je devais m'habituer avec ma nouvelle boite, j'ai du laisser le developpement avec python durant ces mois. Je vous demande pardon de n'avoir pas repondu à vos questions. Mais comme promis bientot, je mettrais en ligne un code source permettant de faire un repertoire telephonique avec une base de données MySQL ou SQlServer. Pour repondre à "quellol2002", je lui dirais que j'ai choisi SQLServer pour montrer qu'avec Python, on peut être sous linux et attaquer un base de données sous Windows. Pour satisfaire sa demande, je développerais l'application avec une base de données MySQL sous Linux et une base de données SQLServer.
Cordialement.
cs_lepecheur Messages postés 35 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 octobre 2007
10 mai 2005 à 09:59
pouloute, je peux déjà aider pour la recherche même si elle ne recherche que la première occurence d'une donnée:
il faut ajouter le bouton recherche :

Button(fen1, text=' Find ' , command=infos).grid(row=4,column=5)

puis les fonctions (avec base.txt la base de données):

def recherche(num=0, element='', suivant=0):

if num == 3:
placer()
return
f = open('Base.txt','r')
j=1
while j==1:
prenom = f.readline()[:-1]
nom = f.readline()[:-1]
numero = f.readline()[:-1]
liste=[prenom, nom, numero]
if liste[num]==element:
placer(liste)
f.close()
return
if prenom '' or nom '' or numero == '' : j=0
if j == 0: placer ()
f.close()

def placer(liste=['Non trouvé','Non trouvé','Non trouvé']):

varP.set(liste[0])
varN.set(liste[1])
varT.set(liste[2])

def infos():

prenom = entr1.get()
nom = entr2.get()
tele = entr3.get()
if prenom !='':
return recherche(0,prenom)
elif nom !='':
return recherche(1,nom)
elif tele !='':
return recherche(2,tele)
else: return recherche(3)
quellol2002 Messages postés 1 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 14 avril 2005
14 avril 2005 à 12:47
Plutot que SQLServer 2000, un choix techno interessant serait une solution LDAP
poloute Messages postés 7 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 19 janvier 2005
19 janv. 2005 à 02:12
Merci pour ce script que je tente desesperement de transformer avec un bouton 'recherche'. Je m'explique :
je souhaite,apres avoir saisi un nom dans l'une des 3 entrées,que ce nouveau bouton affiche les 2 autres qui lui sont attachées et ce autant de fois que le nom saisi existe dans le fichier.Je suis neuf en python.Merci pour votre aide.
cs_lepecheur Messages postés 35 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 octobre 2007
7 janv. 2005 à 11:29
Il y a un petit problème avec la fonction sauve(fichier):

Il faudrait soit laisser le fichier dans sauve(fichier) dans la définition mais alors proposer à l'utilisateur de donner un nom de fichier car lorsque l'on appuie sur "save",

Button(fen1, text=' Save ',command=sauve).grid(row=4,column=0)

la commande ne donne pas l'argument fichier demandé =>


TypeError: sauve() takes exactly 1 argument (0 given)

avec un (raw_)input au début du code on pourrait demander à l'utilisateur de quelle base de donnée il veut se servir, ou alors on en impose une, auquel cas le (fichier) dans la définition de la fonction sauve est inutile vu qu'il suffit de mettre le nom du fichier dans la fonction open()
Rejoignez-nous