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 22/08/2012, à 10:41

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

le premier test donne comme toi:
A+
T

echo -e "-5\n-1\n-10" | sort -n
-10
-5
-1

EDIT:je te donne quand meme le resultat du script pour check, car il me semble que cela peut t'aider, la différence apparait en fin de boucle (3eme ligne à partir de la fin)

./compact4.sh.phrase_courte "4 Tunna Brix" 16
phrase_courte=Tunna Brix 4= nb_mot_phrase_courte=3=
-1000 01 1 4
-5 02 5 Tunna
-4 03 4 Brix
-1000 01 1 4
-5 02 5 Tunna
-4 03 4 Brix
-1000 01 1 4
-5 02 5 Tunna
-4 03 4 Brix
01 4
02 Tunna
03 Brix
02 Tunna
03 Brix
01 4

Dernière modification par thurston (Le 22/08/2012, à 10:45)

Hors ligne

#27 Le 22/08/2012, à 10:55

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Ce n'est donc pas ce à quoi je pensais. C'est le dernier tri qui est erroné.
Essaye :

$ echo -e "01 4\n02 Tunna\n03 Brix" | sort -n
01 4
02 Tunna
03 Brix

Hors ligne

#28 Le 22/08/2012, à 11:52

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

oui la différence apparait bien ici:

echo -e "01 4\n02 Tunna\n03 Brix" | sort -n
02 Tunna
03 Brix
01 4

A noter que:

echo "01 4\n02 Tunna\n03 Brix" | sort -n
01 4\n02 Tunna\n03 Brix

et que (peut etre débile)

echo -e "01 4\n02 Tunna\n03 Brix" || sort -n
01 4
02 Tunna
03 Brix

Dernière modification par thurston (Le 22/08/2012, à 11:57)

Hors ligne

#29 Le 22/08/2012, à 12:11

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

C'est curieux. Je viens de tester sur un ordinateur 32 bits (Ubuntu 9.04), et le tri est correct aussi.
Essaye :

$ echo -e "01 4\n02 Tunna\n03 Brix" | sort
01 4
02 Tunna
03 Brix

Hors ligne

#30 Le 22/08/2012, à 12:15

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

thurston #28 a écrit :

et que (peut etre débile)

echo -e "01 4\n02 Tunna\n03 Brix" || sort -n
01 4
02 Tunna
03 Brix

Là tu fais le echo, et comme il se passe bien tu n'exécutes pas sort -n (qui attendrait des données de l'entrée standard).

Hors ligne

#31 Le 22/08/2012, à 12:35

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

ca a l'air ok avec ceci

echo -e "01 4\n02 Tunna\n03 Brix" | sort
01 4
02 Tunna
03 Brix

Hors ligne

#32 Le 22/08/2012, à 12:50

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Dans ce cas, il suffit de remplacer la ligne 17 du script compact4.sh du #16 :

   done | sort -n | head -$nb_mot | cut -d\  -f2,4 | sort -n | cut -d\  -f2

devient

   done | sort -n | head -$nb_mot | cut -d\  -f2,4 | sort    | cut -d\  -f2

mais je ne comprends pas ce qui clochait dans ton cas. Quelle version de bash utilises-tu ?
Chez moi :

$ bash --version
GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)

et aussi :

$ sort --version
sort (GNU coreutils) 8.5

Dernière modification par pingouinux (Le 22/08/2012, à 13:10)

Hors ligne

#33 Le 22/08/2012, à 13:12

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

oui je ferai la modif specifique à ... mes PCs en général, jusqu'à identifier la source. Ca reste très étrange, merci pour le debug, hors de ma portée.
A+
T

bash --version
GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
sort --version
sort (GNU coreutils) 8.13

et sur mon serveur (même problématique)

bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
sort --version
sort (GNU coreutils) 7.4

Dernière modification par thurston (Le 22/08/2012, à 13:17)

Hors ligne

#34 Le 22/08/2012, à 15:23

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

En fait il faut que je change absolument partout
sort -n >> sort dans le script.
Et là ca fonctionne.
A+
T

Dernière modification par thurston (Le 22/08/2012, à 15:29)

Hors ligne

#35 Le 22/08/2012, à 17:54

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Remarque : J'ai pu faire reproduire ton problème de tri par quelqu'un qui tourne en 12.04 64 bits.

thurston #34 a écrit :

En fait il faut que je change absolument partout
sort -n >> sort dans le script.
Et là ca fonctionne.

Je suis dubitatif. Essaye voir avec plus de 10 mots dans la phrase.

Hors ligne

#36 Le 22/08/2012, à 18:43

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Effectivement
"sort -n" version:
> ok si nb  word > 10

./compact "Thurston Moore is nowadays thurson believe next to him yes and them" 14
Thur.nowa.beli (14)

> mais deplace le chiffre et le compte comme un nombre de char

./compact "4 Thurston Moore is nowadays" 14
Thur.nowa.4 (11)

"sort" version: (on supprime tous les -n du script qui suivent le sort)
> plante si nb  word > 10, ok sinon

./compact "Thurston Moore is nowadays" 14
Thur.Moor.nowa (14)
./compact "Thurston Moore is nowadays thurson believe next to him yes and them" 14
and.them.Thurs (14)

> conserve le chiffre au début et respecte la longueur si chiffre si et seulement si nb char < 10

./compact "4 Thurston Moore is nowadays" 14
4.Thurs.nowada (14)

Dernière modification par thurston (Le 22/08/2012, à 18:43)

Hors ligne

#37 Le 22/08/2012, à 18:53

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

thurston #36 a écrit :

"sort -n" version:
> ok si nb  word > 10

./compact "Thurston Moore is nowadays thurson believe next to him yes and them" 14
Thur.nowa.beli (14)

Ce n'est pas bon, on devrait avoir :

Thur.nowa.thur

"thurson" et "believe" ont même nombre de caractères, on devrait prendre le premier

Hors ligne

#38 Le 22/08/2012, à 19:14

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

correct.

A noter:
script #16

./compact "1x7char 2x7char 3x7char 4x7char 5x7char" 8
1x7.5x7c (8)
./compact "1x7char 2x7char 3x7char 4x7char 5x7char" 15
1x7c.4x7c.5x7ch (15)
./compact "1x7char 2x7char 3x7char 4x7char 5x7char" 24
1x7ch.3x7ch.4x7ch.5x7cha (24)

l'ordre est un peu inversé non?

Hors ligne

#39 Le 22/08/2012, à 19:30

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

C'est un bon test. Chez moi, c'est correct.

$ ./compact4.sh "1x7char 2x7char 3x7char 4x7char 5x7char" 8
1x7.2x7c

$ ./compact4.sh "1x7char 2x7char 3x7char 4x7char 5x7char" 15
1x7c.2x7c.3x7ch

$ ./compact4.sh "1x7char 2x7char 3x7char 4x7char 5x7char" 24
1x7ch.2x7ch.3x7ch.4x7cha

J'ai le même résultat en enlevant un seul -n (voir mon message #32). Ça ne doit pas faire de différence, car ce tri s'effectue sur des nombres de la forme 01 02 03…. Un tri alphabétique ou numérique doit donner la même chose. Avec des nombres de la forme 1 2 3…, un tri alphabétique va placer 10 avant 2.

Hors ligne

#40 Le 22/08/2012, à 20:24

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

bon, ceci fonctionne chez moi, enfin je crois (je teste en ce moment). J'ai soupoudré sans vraiment comprendre du sort -g, sort -n, sort -d...

#!/bin/bash

compact() {
   phrase="$1"
   nb_mot_phrase=$(wc -w <<<"$phrase")
   nb_car_tot="$2"
   nb_mot=$(bc <<<"sqrt($nb_car_tot)")
   ((nb_mot>nb_mot_phrase)) && nb_mot=$nb_mot_phrase
   #############################################################################
   n=0
   phrase_courte=$( echo $(
   for mot in ${phrase}
   do
      ((n++))
      ((n==1)) && lon=1000 || lon=${#mot}
      printf "%s %02d %s %s\n" -$lon $n ${#mot} $mot
   done | sort -g | head -$nb_mot | cut -d\  -f2,4 | sort -d | cut -d\  -f2
   ) )
   nb_mot_phrase_courte=$(wc -w <<<"$phrase_courte")
   echo "$phrase_courte"
   #############################################################################
 # Chaque ligne de "liste" va contenir :
   # la longueur du mot
   # sa place dans la phrase
   # le mot
   # 0 (ou 1 si dernier mot de la phrase)
 # Cette "liste" est triée par longueurs croissantes des mots
   n=0
   liste=$(
   for mot in ${phrase_courte}
   do
      ((n++))
      printf "%s %s %s %s\n" ${#mot} $n $mot $((n==nb_mot_phrase_courte))
   done | sort -d
   )
   #############################################################################
   deja_der=0
   resul=$( printf "%s" $(
   while read l_mot place mot der
   do
      nb_car_mot=$(( (nb_car_tot-nb_mot+1-deja_der)/nb_mot ))
      if ((der==1)); then                  # Dernier mot
         if ((l_mot <= nb_car_mot)); then
            printf "%s %s\n" $place "$mot"
            lon=$l_mot
         else
            printf "%s %s\n" $place "${mot:0:$nb_car_mot}"
            lon=$nb_car_mot
         fi
      else                                 # Pas dernier mot
         if ((l_mot <= $nb_car_mot )); then
            printf "%s %s\n" $place "$mot."
            lon=$((l_mot+1))
         else
            printf "%s %s\n" $place "${mot:0:$nb_car_mot}."
            lon=$((nb_car_mot+1))
         fi
      fi
      ((nb_car_tot-=lon))
      ((nb_mot--))
      ((deja_der+=der))
   done <<<"${liste}" | sort -d | cut -d\  -f2
   ) )
################################################################################
   echo "$resul"
   echo -n "$resul" | wc -c
}

compact "$1" "$2"

Resultat:

./compact "1x7char 2x7char 3x7char 4x7char 5x7char" 15
1x7c.2x7c.3x7ch (15)
./compact "4 Thurston Moore is nowadays thurson believe next to him yes and them" 14
4.Thurs.nowada (14)
./compact "01x8char 02x8char 03x8char 04x8char 05x8char" 15
01x8.02x8.03x8c (15)
./compact "Thurston Moore is nowadays thurson believe next to him yes and them" 14
Thur.nowa.thur (14)

Dernière modification par thurston (Le 22/08/2012, à 20:30)

Hors ligne

#41 Le 22/08/2012, à 21:38

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Si ce n'est pas abuser, je voudrais vérifier autre chose. Que donnent ces commandes :

locale
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=C sort -n 
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=fr_FR.UTF-8 sort -n
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=en_US.UTF-8 sort -n

PS : Pour info, ce n'est pas soupoudrer, mais saupoudrer. C'est une faute couramment commise.

Hors ligne

#42 Le 22/08/2012, à 22:02

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Salut, ben non t'abuses pas, après les heures que tu m'as consacrées, script et maj langue française ;-)
Merci pour la correction, j'apprécie.
Pour la suite, je pense que tu dois pas être loin...on revient au français qui me fait défaut j'ai l'impression, même dans les scripts ;-)

locale
LANG=fr_FR.UTF-8
LANGUAGE=fr:en
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC=fr_FR.UTF-8
LC_TIME=fr_FR.UTF-8
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY=fr_FR.UTF-8
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_ALL=
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=C sort -n 
01 4
02 Tunna
03 Brix
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=fr_FR.UTF-8 sort -n
02 Tunna
03 Brix
01 4
echo -e "01 4\n02 Tunna\n03 Brix" | LC_ALL=en_US.UTF-8 sort -n
01 4
02 Tunna
03 Brix

Dernière modification par thurston (Le 22/08/2012, à 22:04)

Hors ligne

#43 Le 22/08/2012, à 22:26

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Bon, ça avance.
Tu peux reprendre mon script du #16, et essayer :

LC_ALL=C ./compact4.sh "1x7char 2x7char 3x7char 4x7char 5x7char" 24

Sinon, tu mets cette ligne après #!/bin/bash dans le script :

export LC_ALL=C

Hors ligne

#44 Le 22/08/2012, à 22:39

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Bingo bravo.
Cela ne vaudrait il pas mieux de mettre dans le script #16 la 2eme ligne?
Celle ci est transparente (ne modifie pas les locale de l'utilisateur) et évite tout risque. Non?
En tous les cas merci pour tout
A+
T

EDIT:
En fait ce que j'ai fait pour pas mettre le bazar dans mon script global c'est
remplacer sort -n par LC_ALL=C sort -n

Dernière modification par thurston (Le 22/08/2012, à 22:54)

Hors ligne

#45 Le 22/08/2012, à 22:46

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

Ok, je corrige #16. Bonne nuit.

Hors ligne

#46 Le 23/08/2012, à 07:34

pingouinux

Re : [RESOLU] Compacter une phrase complète pour low char display

thurston #44 a écrit :

En fait ce que j'ai fait pour pas mettre le bazar dans mon script global c'est
remplacer sort -n par LC_ALL=C sort -n

C'est une bonne méthode aussi. Tu les a bien tous modifiés ?

Je pense avoir compris ce qui se passait : en  fr_FR.UTF-8, dans un nombre, l'espace sert de séparateur des milliers. Tant que sort -n voit des chiffres et des espaces consécutifs sur une ligne, il les regroupe dans un seul champ. Ici, il triait donc : 014, 02, 03

Hors ligne

#47 Le 23/08/2012, à 08:06

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Bonjour, oui tous modifiés, le script a mouliné toute la nuit sur 2 000 mp3s, sans souci de naming à première vue, donc à priori ok.
Encore merci
A+
T

Hors ligne

#48 Le 29/08/2012, à 23:00

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Bonjour,

Bon les différents scripts de pingouinux tournent à plein régime (j'ai réencodé des Go de musique sous tous les players de la famille, tout le monde est content).

Je viens de poster un nouveau "challenge" dans le même esprit mais vraiment plus simple j'ai l'impression, et qui finit le thème du compactage de "musique" pour affichage ET NAVIGATION cette fois ci dans un mp3 player rudimentaire, mais à grosse capacité.

Je serais hypocrite si je disais ne pas tenter de stimuler une fois de plus pingouinux qui m'a tant aidé.
Si tu passes par là...et par   surtout ;-)
A+
Merci
T

PS:
je mettrais dans un poste bientot le principe du script (1300 lignes actuellement et beaucoup de copier coller du forum bien sur) donc le poster en vrac n'a aucun intérêt, mais l'idée (agrémentée des scripts issus de la communauté) est vraiment adaptée à qui écoute de la musique en masse à la maison et qui veut la transférer sur des petits players à navigation limitée (un très bon player qui lit les tag gère tout tout seul, mais pas unArchos 10B (forme en oeil)ou encore un  petit player chinois à 10 euros , qui a pourtant un port uSD et peut embarquer des milliers de titres, et là çà se complique pour retrouver ses petits...)

Hors ligne

#49 Le 03/09/2012, à 21:46

thurston

Re : [RESOLU] Compacter une phrase complète pour low char display

Bonjour

Le sujet de ce post est issu d'un projet global décrit ici.
A+
T

Dernière modification par thurston (Le 03/09/2012, à 21:46)

Hors ligne