Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 15/03/2010, à 23:01

gilbert

Re : [JEU] challenge bash #6

AnsuzPeorth a écrit :
nesthib a écrit :

@samuncle : ben on attend ta solution en python… allez au boulot !

Vivi, on attend ! J'aimerais bien voir comment résoudre ce problème d'encodage de caractères (le script de kanor me retourne une erreur !)

+1 Voici ce que j'obtiens :

gilbert@ConuxBox:~/challengeUbuntuForum/challenge6$ python script.py -f test -c 50 -l 50
Traceback (most recent call last):
  File "script.py", line 49, in <module>
    text = unicode(text)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)

Simplement moi-même..

Hors ligne

#27 Le 15/03/2010, à 23:02

samυncle

Re : [JEU] challenge bash #6

Vivi, on attend ! J'aimerais bien voir comment résoudre ce problème d'encodage de caractères (le script de kanor me retourne une erreur !)

On supprime les accents du français c'est simple non tongue

Pour mon script j'ai pas trop le temps maintenant mais j'y réfléchis smile


Hello world

Hors ligne

#28 Le 15/03/2010, à 23:07

Kanor

Re : [JEU] challenge bash #6

gilbert
tu peux lancer dans un terminal
python

>>>import sys
>>>sys.getdefaultencoding( )

la j'obtiens 'utf-8'

Hors ligne

#29 Le 15/03/2010, à 23:10

gilbert

Re : [JEU] challenge bash #6

ok, j'obtiens ascii... où est-ce que l'on configure cela ?


Simplement moi-même..

Hors ligne

#30 Le 15/03/2010, à 23:10

AnsuzPeorth

Re : [JEU] challenge bash #6

samuncle a écrit :

On supprime les accents du français c'est simple non tongue

Vu comme ça, effectivement, plus de problèmes ...:)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#31 Le 15/03/2010, à 23:14

AnsuzPeorth

Re : [JEU] challenge bash #6

gilbert a écrit :

ok, j'obtiens ascii... où est-ce que l'on configure cela ?

Pareil chez moi (ca doit être le défaut).
J'ai essayé cette commande sans succès également.

ligne.decode('utf-8').encode(sys.stdout.encoding,'replace')

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#32 Le 15/03/2010, à 23:15

Kanor

Re : [JEU] challenge bash #6

je pense que remplacer
text = unicode(text) par
text = text.decode('utf-8')
doit étre suffisant

Hors ligne

#33 Le 15/03/2010, à 23:20

AnsuzPeorth

Re : [JEU] challenge bash #6

Kanor a écrit :

je pense que remplacer
text = unicode(text) par
text = text.decode('utf-8')
doit étre suffisant

Là c'est bon !


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#34 Le 15/03/2010, à 23:21

Kanor

Re : [JEU] challenge bash #6

Article intéressant sur le sujet
http://sebsauvage.net/python/charsets_et_encoding.html

Hors ligne

#35 Le 16/03/2010, à 09:53

gilbert

Re : [JEU] challenge bash #6

Kanor a écrit :

Article intéressant sur le sujet
http://sebsauvage.net/python/charsets_et_encoding.html

J'avais déjà lu cet article.. mais il n'explique pas comment régler l'encodage par défaut de python.. En gros c'est un peu dommage d'avoir des fichiers en utf8, un terminal en utf8, bref un système complet en utf8 et être coincé par python car il travaille de base en ascii...


Simplement moi-même..

Hors ligne

#36 Le 16/03/2010, à 16:01

sebsauvage

Re : [JEU] challenge bash #6

gilbert a écrit :
Kanor a écrit :

Article intéressant sur le sujet
http://sebsauvage.net/python/charsets_et_encoding.html

J'avais déjà lu cet article.. mais il n'explique pas comment régler l'encodage par défaut de python.. En gros c'est un peu dommage d'avoir des fichiers en utf8, un terminal en utf8, bref un système complet en utf8 et être coincé par python car il travaille de base en ascii...

Par défaut Python travaille en UTF-8 (attention tout de même à certaines librairies pour lesquelles ce n'est pas le cas).

Ensuite quand tu exécute dans un terminal, tout dépend de l'encodage que supporte ton terminal.
Par exemple sous windows:

>>> import sys
>>> print sys.stdout.encoding
cp850

Donc un simple "print 'bébé'" échoue facilement si tu n'encode pas correctement pour ton terminal :-)

Quand à la lecture des fichiers, tu es censé savoir quel charset/encodage du lis/écris, il faut donc utiliser .decode()/.encode() en précisant l'encodage.

Evitez le unicode()/getsysdefaultencoding() puisque cela dépend de l'encodage par défaut de l'installation de Python (et pouf le programme qui plante dès qu'il est installé ailleurs).

C'est une complexité masquée par beaucoup d'autres langages. En python c'est plus contraignant mais on a la possibilité d'utiliser pratiquement n'importe quel encodage (depuis et vers).

Hors ligne

#37 Le 16/03/2010, à 17:06

AnsuzPeorth

Re : [JEU] challenge bash #6

Sur un autre forum, on m'a proposé ce qui suit:

# lecture d'un texte codé en utf-8 sur disque
f = codecs.open("testutf.txt", 'r', 'utf-8')

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#38 Le 16/03/2010, à 17:11

nesthib

Re : [JEU] challenge bash #6

sebsauvage a écrit :

[…]

petite curiosité HS, comment surveilles-tu les références à ton blog ? (félicitations par ailleurs pour son contenu)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#39 Le 16/03/2010, à 17:21

sebsauvage

Re : [JEU] challenge bash #6

AnsuzPeorth a écrit :

Sur un autre forum, on m'a proposé ce qui suit:

# lecture d'un texte codé en utf-8 sur disque
f = codecs.open("testutf.txt", 'r', 'utf-8')

C'est aussi une possibilité.

Hors ligne

#40 Le 16/03/2010, à 17:23

sebsauvage

Re : [JEU] challenge bash #6

nesthib a écrit :

petite curiosité HS, comment surveilles-tu les références à ton blog ?

De temps en temps je google "sebsauvage" avec tri par date, par curiosité big_smile
Des fois je trouve des trucs marrants.

nesthib a écrit :

(félicitations par ailleurs pour son contenu)

merci smile

Dernière modification par sebsauvage (Le 16/03/2010, à 17:23)

Hors ligne

#41 Le 16/03/2010, à 18:21

gilbert

Re : [JEU] challenge bash #6

sebsauvage a écrit :
gilbert a écrit :
Kanor a écrit :

Article intéressant sur le sujet
http://sebsauvage.net/python/charsets_et_encoding.html

J'avais déjà lu cet article.. mais il n'explique pas comment régler l'encodage par défaut de python.. En gros c'est un peu dommage d'avoir des fichiers en utf8, un terminal en utf8, bref un système complet en utf8 et être coincé par python car il travaille de base en ascii...

Par défaut Python travaille en UTF-8 (attention tout de même à certaines librairies pour lesquelles ce n'est pas le cas).

Ensuite quand tu exécute dans un terminal, tout dépend de l'encodage que supporte ton terminal.
Par exemple sous windows:

>>> import sys
>>> print sys.stdout.encoding
cp850

Donc un simple "print 'bébé'" échoue facilement si tu n'encode pas correctement pour ton terminal :-)

Quand à la lecture des fichiers, tu es censé savoir quel charset/encodage du lis/écris, il faut donc utiliser .decode()/.encode() en précisant l'encodage.

Evitez le unicode()/getsysdefaultencoding() puisque cela dépend de l'encodage par défaut de l'installation de Python (et pouf le programme qui plante dès qu'il est installé ailleurs).

C'est une complexité masquée par beaucoup d'autres langages. En python c'est plus contraignant mais on a la possibilité d'utiliser pratiquement n'importe quel encodage (depuis et vers).

Ok, pyhton travaille donc bien en UTF-8 par défaut.

mais, bon comme vous l'aurez remarqué je ne fais pas de python.. mais ça m'intéresse cette histoire... Désolé, je ne comprends pas tout et je suis intrigué.

Le code que m'a dit d'exécuter Kanor en #28 me retourne 'ascii' alors que le code

>>> import sys
>>> print sys.stdout.encoding

retourne UTF-8 chez moi.

Mon terminal est en UTF-8, le fichier source est en UTF-8. Pourquoi alors le script de Kanor tel qu'il nous l'a proposé ne fonctionne-t-il pas chez moi mais bien chez lui ?

Il y a bien une coquille quelque part, car si tout était UTF-8 du début à la fin, il n'y aurait pas de problèmes... et comme le fichier et mon terminal sont en UTF-8, la seule source d'erreur ne peut être que python. Me trompé-je mon cher Watson ? wink


Simplement moi-même..

Hors ligne

#42 Le 16/03/2010, à 19:34

toto2006

Re : [JEU] challenge bash #6

AnsuzPeorth
    Hier à 23:20

    Kanor a écrit:

    je pense que remplacer
    text = unicode(text) par
    text = text.decode('utf-8')
    doit étre suffisant

Là c'est bon !

Cool j'ai enfin reussi a tester le code de Kanor !

sinon ton prog marche bien (c'est rapide)

par contre j'ai remarqué que sur l'exemple du poème posté ici avec :

./kanor -c40 -l40 -f Poemeloup

Il est des loups de toute sorte Je conna
is le plus inhumain Mon cœur que le diab
le l'emporte Et qu'il le dépose à sa por
te N'est plus qu'un jouet dans sa main

cela ne respecte pas la mise en forme d'origine ( le \n ) cela implique qu'une ligne plus courte que Max_C sera complétée par le début de la ligne suivante jusqu'a Max_C.

sinon a part ca il marche bien !
c'est vrai python ca a l'air simple puissant et rapide !
mais bon je reste a mon vieux bash & c smile

Hors ligne

#43 Le 16/03/2010, à 20:12

Gage

Re : [JEU] challenge bash #6

Vivi, on attend ! J'aimerais bien voir comment résoudre ce problème d'encodage de caractères (le script de kanor me retourne une erreur !)

Quelqu'un a tenté avec Python 3.0 ? Tout y est en Unicode par défaut...


Ça, ce sont les sources. Le mouton que tu veux est dedans.
Merci, c'est tout à fait comme ça que je le voulais ! Crois-tu qu'il faille beaucoup de ressources à ce mouton ? Parce que ma config est toute petite...
Ça devrait aller. Tu peux te compiler un petit mouton.
Pas si petit que ça. Tiens ! il s'est mis en veille...

Hors ligne

#44 Le 16/03/2010, à 20:15

BadZoot

Re : [JEU] challenge bash #6

HAHAHA !!! Résistance pythonicienne !!! (Pardon, je suis désolé)

Je propose un script que voici :
Il suffit juste de lancer le script. Ensuite, vous serez invités à saisir le nom de fichier, les dimensions, et la touche 'ENTRÉE' pour afficher la page suivante.

J'ai testé avec le synopsis que vous trouverez à cette adresse :
http://fr.wikipedia.org/wiki/Le_Comte_de_Monte-Cristo

Le script ne coupe pas les mots : une ligne après l'autre, on va lister les mots séparés par un caractère Espace, puis les assembler jusqu'à la longueur maximale désirée.

Bonsoir.


#!/usr/bin/env python
#-*-coding:utf8-*-



def coupe(chaine, nb_char):
    """Séparation de tous les mots de la ligne et assemblage de la chaine de mots, contenus dans une liste."""
    liste=[]
    compo= ''
    # Décomposition de la chaine en liste de mots, séparateur : ' '.
    s_liste=[w for w in chaine.split(' ')]

    for word in s_liste:
        #Si la longueur de la chaine est inférieure au nb de caractères prévus, on ajoute le mot suivant à la suite.
        if len(compo+word)<=nb_char+1:
            compo+=word+' '
            #Exception : s'il n'y a plus assez de mots pour arriver jusqu'à nb_char:
            if word == s_liste[-1]:
                compo=compo[:-1]
                liste.append(compo)
        #Sinon, ajout de la chaine dans la liste, reset de la chaine de stockage.
        else:
            compo=compo[:-1]
            liste.append(compo)
            compo = word+' '
            #Exception : s'il n'y a plus assez de mots pour arriver jusqu'à nb_char:
            if word == s_liste[-1]:
                compo=compo[:-1]
                liste.append(compo)

    return liste



#Saisie des paramètres:
f=raw_input('Nom de fichier :\n> ')
nb_char=int(raw_input('Largeur de la page :\n> '))
nb_line=int(raw_input('Hauteur de la page :\n> '))

fich = open(f,'r')
cptr_line=0
for ligne in fich:
    ligne =ligne[:-1] #UNIX: suppression du CR

    if len(ligne)>nb_char:
        para = coupe(ligne,nb_char)
        cptr_line+=len(para)
        
        if cptr_line<=nb_line:
            for i in para:
                print i
        
        else:
            raw_input('   ---   Entrée pour continuer   ---    ')
            cptr_line = 0
            para = coupe(ligne,nb_char)
            cptr_line+=len(para)
        
            if cptr_line<=nb_line:
                for i in para:
                    print i
        
    else:
        cptr_line+=1
        if cptr_line<=nb_line:
            print ligne

Dernière modification par U-toyen (Le 16/03/2010, à 20:34)


Le pervers père de Pierre perd son imper' vert.

No, I am Zoot's identical twin-sister : Dingo.

Hors ligne

#45 Le 16/03/2010, à 20:26

sebsauvage

Re : [JEU] challenge bash #6

gilbert a écrit :

Ok, pyhton travaille donc bien en UTF-8 par défaut.

Non, en Unicode, nuance. wink
L'UTF-8 n'est utilisé que pour les entrées ou sortie, pas pour le fonctionnement interne de Python.

gilbert a écrit :

Le code que m'a dit d'exécuter Kanor en #28 me retourne 'ascii' alors que le code

>>> import sys
>>> print sys.stdout.encoding

retourne UTF-8 chez moi.

Il ne faut pas utiliser unicode() mais .decode()

Hors ligne

#46 Le 16/03/2010, à 21:03

Kanor

Re : [JEU] challenge bash #6

U-toyen Il semble avoir des bugs quand le paragraphe est plus long que la page et surtout tu ne prend pas compte l'élément paragraphe mais l'objet ligne pour ton découpage essaye ce text dans le message suivant
http://forum.ubuntu-fr.org/viewtopic.php?pid=3338477#p3338477
avec comme paramétre 10 et 10
j'obtiens

   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---    
   ---   Entrée pour continuer   ---

wink

toto2006Oui bonne remarque mon script a un peu trop tendance à compressé le text à voir si je trouve du temps pour améliorer ça  et aussi le fait de ne pas couper les mots.

Dernière modification par Kanor (Le 16/03/2010, à 21:19)

Hors ligne

#47 Le 16/03/2010, à 22:11

BadZoot

Re : [JEU] challenge bash #6

Aux temps pour moi.

En fait, je gère si le paragraphe est de taille inférieure ou égale à celle qu'on veut, mais j'ai complètement zappé le cas contraire.
D'un autre coté, je ne sais pas très bien comment on doit gérer cela. Je vais regarder comment vous avez fait.

Par ailleurs, j'ai remarqué que la longueur des lignes que j'affiche n'est pas toujours optimale.


Le pervers père de Pierre perd son imper' vert.

No, I am Zoot's identical twin-sister : Dingo.

Hors ligne

#48 Le 16/03/2010, à 23:55

nesthib

Re : [JEU] challenge bash #6

remarques :

- gilbert : ton premier script n'affiche pas tous les paragraphes et élimines les espaces en début de ligne. Le second affiche bien tous les paragraphes mais il y a un décalages sur les longs textes et encore ce problème d'espaces en début de ligne. Enfin c'est (très, très) lent avec un très gros texte (quelques minutes contre 100ms pour le mien wink). Et en fait ça ne fonctionne pas avec tous les textes.

- AnsuzPeorth : grrrr ton script a fait planter mon terminal sad sinon ça fonctionne pas trop mal (mais pas pour tout mes fichiers de test)

- toto2006 : bon tout fonctionne nickel, mais Zzzz… c'est lent ! 8 minutes pour mon gros fichier wink sinon ton script ne prends pas en compte le cas où un paragraphe est plus long qu'une page.

- Kanor : problème d'encodage chez moi aussi, dans le terminal. À part ça, il ne conserve pas les retours à la ligne existant ce qui déstructure tout le texte !

- U-toyen : ça me zappe des paragraphes. Sinon le côté interactif et l'affichage pas morceaux ne rend pas le script très utilisable (on ne peut pas rediriger la sortie vers un fichier par exemple)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#49 Le 17/03/2010, à 00:09

sputnick

Re : [JEU] challenge bash #6

toto2006, sympa tes boucles for C style :

for((j=1,posx=0;j<fin;j++)){
    (...)

Je ne savait pas qu'on pouvait écrire cela avec la virgule pour initialiser des variables multiples et des

{}

à la place d'un

for ((foo)); do stuff; done

Dernière modification par sputnick (Le 17/03/2010, à 00:10)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#50 Le 17/03/2010, à 00:23

AnsuzPeorth

Re : [JEU] challenge bash #6

nesthib a écrit :

sinon ça fonctionne pas trop mal

T'es gentil sur ce coup smile. Ca mérite 1/20, pour l'encre et le papier (et j'ai pas fait de faute à mon nom, tiens, ca me rappelle l'école !)
J'ai posté pour participer, pas pour gagner wink


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne