<p class="spip"><a href="http://www.coagul.org/article.php3?id_article=409" class="spip_out">Dans le tutoriel précédent</a>, j’ai détaillé les fonctionnalités de l’application que nous allons commencer à réaliser.</p>

<h3>Éléments abordés dans ce document</h3>
<li> Les listes « avec [] et les instructions for, in, if et les fonctions index() et append() »
<br /><li> La gestion des exceptions « avec try, except, finally »
<br /><li> La lecture d’un fichier texte « avec open(), readlines() et close() »
<br /><li> L’utilisation d’une QListView
<br /><li> Les expressions régulières « avec findall() »
<br /><li> L’affectation multiple de variable « avec var1,var2=val1,val2 »
<br /><li> L’encodage utf8 « avec unicode() »
<h3>Au travail</h3>
<li> Création de la ListView avec QT Designer
<span class='spip_document_794 spip_documents spip_documents_center' >
<img src='http://download.tuxfamily.org/assocoagul/drupal-files/spip/editListview.png' width="665" height="340" alt="" /><span>
<h3>Explications des lignes du fichier myreadfile.py</h3>
<p class="spip">2 lignes à mettre en tête des fichiers python</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
#!/usr/bin/env python<br />
# -*- coding: iso-8859-15 -*-<br />
</code></div>
<p class="spip">Création des 4 items correspondant aux opérations</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
items=[]<br />
items.append(QListViewItem(f.ExerciseListView,"Additions"))<br />
items.append(QListViewItem(f.ExerciseListView,"Divisions"))<br />
items.append(QListViewItem(f.ExerciseListView,"Multiplications"))<br />
items.append(QListViewItem(f.ExerciseListView,"Soustractions"))<br />
</code></div>
<p class="spip">Lecture du fichier exercices.txt. On stocke les lignes du fichier dans la liste <i class="spip"> <strong class="spip">dataLines</strong> </i> en éliminant les lignes de commentaire.</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
try:<br />
        fsock = open('exercices.txt')<br />
        try:<br />
                dataLines = [line for line in fsock.readlines() if line[0]!='#']<br />
        finally:<br />
                fsock.close()<br />
except IOError:<br />
        pass<br />
</code></div>
<p class="spip">Les expressions régulières permettent d’isoler chaque élément d’une ligne du fichier. L’affectation multiple permet d’initialiser les variables en une seule opération.</p>

<p class="spip">On ajoute les valeurs extraites de <i class="spip"> <strong class="spip">dataline</strong> </i> dans l’ <i class="spip"> <strong class="spip">items[]</strong> </i> correspondant à l’opération. On récupère l’indice de l’opérateur grâce à la liste des opérateurs et la fonction index(). Il faut utiliser unicode() pour convertir les données lues du fichier en utf8.</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
for dataLine in dataLines:<br />
        exercice, oorq, delai, question = re.findall("^([^\\t]+)\\t+([^\\t]+)\\t+(\\d+)\\t+(\\d+)",dataLine)[0]<br />
        op1Min, op1Max, q1, operateur, op2Min, op2Max, q2, max, q3 = re.findall("^\\[([0-9]{1,3})..([0-9]{1,3})\\](_?)([+\\-*/])\\[([0-9]{1,3})..([0-9]{1,3})\\](_?)<=([0-9]{1,3})(_?)$", oorq)[0]<br />
        items.append(QListViewItem(items[['+', '/', '*', '-'].index(operateur)], unicode(exercice,'utf8'), oorq, delai, question))<br />
</code></div>
<p class="spip">Il ne reste plus qu’à lancer</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
pyuic formreadfile.ui > formreadfile.py<br />
python myreadfile.py<br />
</code></div>
<p class="spip">pour obtenir</p>
<dl class='spip_document_813 spip_documents spip_documents_center' >
<dt><img src='http://download.tuxfamily.org/assocoagul/drupal-files/spip/visuExercices.png' width='575' height='263' alt='PNG - 16.7 ko' /><dt>
<dt class='spip_doc_titre' style='width:350px;'><strong>Visualiser les exercices</strong></dt>
</dl>
<dl class='spip_document_795 spip_documents spip_documents_center' >
<dt><a href="http://download.tuxfamily.org/assocoagul/drupal-files/spip/exercices.txt" title='texte - 1.9 ko' type="text/plain"><img src='dist/vignettes/txt.png' width='52' height='52' alt='texte - 1.9 ko' /></a><dt>
<dt class='spip_doc_titre' style='width:120px;'><strong>Le fichier exercices.txt</strong></dt>
<dd class='spip_doc_descriptif' style='width:120px;'>Celui-ci contient une série d’exercices. Les lignes commencant par # sont des commentaires. Ceux-ci sont notamment utilisés pour décrire le format du fichier.</dd>
</dl>
<dl class='spip_document_796 spip_documents spip_documents_center' >
<dt><a href="http://download.tuxfamily.org/assocoagul/drupal-files/spip/formreadfile.ui.zip" title='Zip - 671 octets' type="application/zip"><img src='dist/vignettes/zip.png' width='52' height='52' alt='Zip - 671 octets' /></a><dt>
<dt class='spip_doc_titre' style='width:120px;'><strong>Le formulaire</strong></dt>
</dl>
<dl class='spip_document_814 spip_documents spip_documents_center' >
<dt><a href="http://download.tuxfamily.org/assocoagul/drupal-files/spip/myreadfile.py.zip" title='Zip - 752 octets' type="application/zip"><img src='dist/vignettes/zip.png' width='52' height='52' alt='Zip - 752 octets' /></a><dt>
<dt class='spip_doc_titre' style='width:120px;'><strong>Le fichier myreadfile.py</strong></dt>
</dl>
<p class="spip"><a href="http://www.coagul.org/article.php3?id_article=423" class="spip_out">Pour la suite, c’est ici</a></p>

<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>19/03/2006</td><td>Création par Jibux</td></tr>
<tr class="row_odd"><td>0.2</td><td>26/11/2006</td><td>Ajout d’un lien vers l’article suivant</td></tr>
</tbody>
</table>