from PyQt4.QtCore import * from PyQt4.QtGui import * import sys import csv class Nouv_enq(QDialog): '''class qui permet creation de la table d'une nouvelle enquete à partir d'un fichier de données texte avec nom des champs''' def __init__(self,parent=None): super(Nouv_enq,self).__init__(parent) #les widgets self.lineNom_fichier=QLineEdit() self.butSearch=QPushButton("...") self.butCreer=QPushButton("C&réer") lblSep=QLabel("Séparateur") self.cboSeparator=QComboBox() self.cboSeparator.addItems([";",",","\t"]) lblSep.setBuddy(self.cboSeparator) self.txtResult=QTextEdit() buttonBox=QDialogButtonBox(QDialogButtonBox.Close|QDialogButtonBox.Cancel) # la mise en page grid=QGridLayout() grid.addWidget(self.lineNom_fichier,0,0,1,3) grid.addWidget(self.butSearch,0,5) grid.addWidget(self.butCreer,1,5) grid.addWidget(lblSep,1,0) grid.addWidget(self.cboSeparator,1,1) grid.addWidget(self.txtResult,2,0,10,10) grid.addWidget(buttonBox,13,5) self.setLayout(grid) #signal/slot self.connect(self.butSearch,SIGNAL("clicked()"),self.afficherFichier) self.connect(self.butCreer,SIGNAL("clicked()"),self.creer) def afficherFichier(self): '''affiche les 10 premieres lignes du fichiers de données''' self.txtResult.clear() fname=QFileDialog.getOpenFileName(self,"nouvelles enqêtes") self.lineNom_fichier.setText(fname) f=open(fname,"r") debut="" i=0 while i<10: debut+=f.readline() i+=1 self.txtResult.insertPlainText("%s\n***************************\n"%debut) f.close() def creer(self): '''crée la requete de creation de table''' champs=[] type_champs=[] champsEtType=[] chemin=str(self.lineNom_fichier.text()) pos=chemin.rfind("/") nom_table=chemin[pos+1:-4] fichier_create_table=open("%s"%self.lineNom_fichier.text(),"r") i=0 while i<2: ligne=fichier_create_table.readline() i+=1 for c in ligne.split(str(self.cboSeparator.currentText())): if i==1: champs.append(c.rstrip().replace(" ","_")) if i==2: try: int(c.rstrip()) type_champs.append("integer") except: type_champs.append("varchar") fichier_create_table.close() req="CREATE TABLE %s ("%(nom_table) for i in range(len(champs)): champsEtType.append("%s %s, "%(champs[i],type_champs[i] )) champsEtType[-1]=champsEtType[-1][:-2] champsEtType.append(');') for c in champsEtType: req+=c self.txtResult.insertPlainText(req+"\n****************\n") if __name__ == '__main__': app=QApplication(sys.argv) new_enq= Nouv_enq() new_enq.show() app.exec_()