#26 Le 22/08/2012, à 09: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, à 09:45)
Hors ligne
#27 Le 22/08/2012, à 09: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, à 10: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, à 10:57)
Hors ligne
#29 Le 22/08/2012, à 11: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, à 11:15
- pingouinux
Re : [RESOLU] Compacter une phrase complète pour low char display
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, à 11: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, à 11: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, à 12:10)
Hors ligne
#33 Le 22/08/2012, à 12: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, à 12:17)
Hors ligne
#34 Le 22/08/2012, à 14: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, à 14:29)
Hors ligne
#35 Le 22/08/2012, à 16: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.
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, à 17: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, à 17:43)
Hors ligne
#37 Le 22/08/2012, à 17:53
- pingouinux
Re : [RESOLU] Compacter une phrase complète pour low char display
"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, à 18: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, à 18: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, à 19: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, à 19:30)
Hors ligne
#41 Le 22/08/2012, à 20: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, à 21: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, à 21:04)
Hors ligne
#43 Le 22/08/2012, à 21: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, à 21: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, à 21:54)
Hors ligne
#45 Le 22/08/2012, à 21: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, à 06:34
- pingouinux
Re : [RESOLU] Compacter une phrase complète pour low char display
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, à 07: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, à 22: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 là 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, à 20: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, à 20:46)
Hors ligne