Tronquer longueur texte

symbol

Membre émérite
13 Octobre 2004
536
25
Bonjour

Je perfectionne mon script pour envoyer par SMS, des données (voir mes posts a propos du KENO)

Du moment que la longueur des données contenues dans mon fichier (.txt) est inférieure a 160 caracteres le SMS est bien envoyé.

Par contre au dessus, l'api free mobile me renvoi une erreur 400.

J'utilise la commande :

Bloc de code:
 curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxxxx&msg=${RESULTATCONVERTI}"
Est-il possible de "couper" la longueur du texte afin de limité l'envoi par SMS a 159 caracteres (et envoyer autant de SMS pour completer l'intégralité du texte).

Merci
 

byte_order

Membre confirmé
31 Juillet 2012
304
64
Bloc de code:
...&msg=${RESULTATCONVERTI::159}"
Ah, nan, bash sous macOS est très vieux, mince, ça va pas marcher ça.

Avant d'appeler la commande curl:
Bloc de code:
RESULTATCONVERTI=$(echo "$RESULTATCONVERTI" | cut -c1-159)
 
Dernière édition:

symbol

Membre émérite
13 Octobre 2004
536
25
Finalement, au lieu de tronquer les resultats, il serait plus pratique d'envoyer un message par SMS, pour indiquer que la liste des gagnants est trop longue pour etre envoyer par SMS, et qu'il faut aller voir les resultats via un lien.

- les conditions : Si contenu de ${RESULTATCONVERTI} supérieur a 159 caracteres alors envoyer SMS "Veuillez consulter le résultat complet a "http://kenopronos.free.fr/RESULTATS.pdf" sinon, envoyer le SMS normal.

Ca doit surement se faire un "IF" "ENDIF"

Bloc de code:
 curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxx&msg=${RESULTATCONVERTI}"
Si quelqu'un connait la syntaxe exacte. De mon coté j'essai de voir si je trouve les commandes qui correspondent.

Merci


MAJ : bon, pour compter les caracteres c'est
Bloc de code:
wc -m /Users/xxx/Desktop/RESULTATSSMS2.txt
mais comment "dire" que si valeur de wc - m > 159 alors envoi SMS normal :-/
 
Dernière édition:

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
Bloc de code:
longueur=$(echo "symbol envoie des message trop long" | wc -c)
if [ $longueur -lt 25 ]
then
echo "moins de 25"
else
echo "au moins 25"
fi
:D
 

symbol

Membre émérite
13 Octobre 2004
536
25
Ecatomb de nouveau a mon secours :) Merci

Je regarde en detail, et vois ce que je peux en faire.


MAJ :

Je ne veux pas faire mon malin, mais c'est pas plutot ?
wc [OPTION]... [FILE]...
Principales options :
-l Compter le nombre de lignes
-w Compter le nombre de mots
-c Compter le nombre d'octets
-m Compter le nombre de caractères <============
-C Identique à -m


Sinon, je veux compter le nombre de caracteres qui se trouvent dans le fichier "/Users/xxx/Desktop/RESULTATSSMS2.txt"
 
Dernière édition:

symbol

Membre émérite
13 Octobre 2004
536
25
J'ai essayé ca :

Bloc de code:
#!/usr/bin/env bash

longueur = '/Users/xxx/Desktop/RESULTATSSMS2.txt' | wc -c

if [ $longueur -lt 650 ]
then
  curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxx&msg=${RESULTATCONVERTI}"
else
  curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxx&msg=RECAP trop long par SMS, consulter l'intégralité de la liste a http://kenopronos.free-bb.eu"
fi

J'ai les erreurs :
Bloc de code:
Last login: Sat Apr  7 19:43:01 on ttys000
iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/TEST.sh ; exit;
/Users/xxx/Desktop/TEST.sh: line 3: longueur: command not found
       0
/Users/xxx/Desktop/TEST.sh: line 5: [: -lt: unary operator expected
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 07 Apr 2018 17:47:48 GMT
Transfer-Encoding: chunked
Connection: keep-alive

logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Opération terminée]
 

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
Effectivement, c'est "-m" même si c'est plutôt identique ;)
Bloc de code:
     -m      The number of characters in each input file is written to the standard output.  If the current locale does not
            support multibyte characters, this is equivalent to the -c option.  This will cancel out any prior usage of the
            -c option.
Tu as une erreur dans ton cas. Comme ceci ce sera mieux :
Bloc de code:
longueur = $(cat '/Users/xxx/Desktop/RESULTATSSMS2.txt' | wc -m)
 

symbol

Membre émérite
13 Octobre 2004
536
25
Bloc de code:
#!/usr/bin/env bash


longueur = $(cat '/Users/xxx/Desktop/RESULTATSSMS2.txt' | wc -m)

if [ $longueur -lt 650 ]
then
  curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxxxx&msg=${RESULTATCONVERTI}"
else
  curl -i --insecure "https://smsapi.free-mobile.fr/sendmsg?user=0123456789&pass=xxxxxxxx&msg=RECAP trop long par SMS, consulter l'intégralité de la liste a http://kenopronos.free-bb.eu"
fi
me renvoi 2 erreurs :
Bloc de code:
iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/TEST.sh ; exit;
/Users/xxx/Desktop/TEST.sh: line 4: longueur: command not found   <----
/Users/xxx/Desktop/TEST.sh: line 6: [: -lt: unary operator expected   <----
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 07 Apr 2018 18:12:44 GMT
Transfer-Encoding: chunked

MAJ : la commande ok est
longueur=$(cat '/Users/xxx/Desktop/RESULTATSSMS2.txt' | wc -m)
pas d'espace avant et apres "="
 
Dernière édition:

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
Oups je n'avais pas fait attention à ça, il reste encore les espace autour du symbole "=" qui gênent.
 

byte_order

Membre confirmé
31 Juillet 2012
304
64
Sinon en Bash ya aussi ${#nomdelavariable} qui retourne la longueur.

Bloc de code:
# demo en ligne de commande
test ${#RESULTATCONVERTI} -lt 160 && echo "envoi par sms" || echo "envoi par url"

# dans un script...
if [ ${#RESULTATCONVERTI} -lt 160 ]; then
    # envoi par sms
else
    # envoi par url
fi
 
  • J’aime
Réactions: ecatomb

symbol

Membre émérite
13 Octobre 2004
536
25
Screenshot_2018-04-10-20-01-49.jpg 1) pourquoi c'est ${#RESULTATCONVERTI} et pas ${RESULTATCONVERTI} ?


2) combien comptez vous de caracteres dans le SMS ci-dessous (car etrangement celui m'arrive par SMS alors qu'ils sont normalement limité a 160 caracteres (voir photo ecran rose) ?

Mardi 10 avril 2018 - Midi :%0D%0A--------------------------------%0D%0A01 03 04 13 15 16 19 21 25 26 27 33 35 36 41 45 52 56 61 62%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 13-14-15-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 15-16-17-27-68%0D%0A 3/5 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 19-20-21-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AELSIE X1 : 01 04 07%0D%0A 2/3 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AJEF X1 : 01-02-03-13-15-16-24-67-69%0D%0A 5/9 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0ARECAP du 10-04-2018 14:15:09%0D%0Ahttp://kenopronos.free-bb.eu © Tous droits réservés
 
Dernière édition:

ecatomb

Membre d’élite
Club MacG
21 Septembre 2016
3 761
1 155
${RESULTATCONVERTI} = contenu de la variable (le texte complet)
${#RESULTATCONVERTI} = nombre de caractère du texte stocké dans la variable

Bloc de code:
xxx@xxx:~$ test='Mardi 10 avril 2018 - Midi :%0D%0A--------------------------------%0D%0A01 03 04 13 15 16 19 21 25 26 27 33 35 36 41 45 52 56 61 62%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 13-14-15-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 15-16-17-27-68%0D%0A 3/5 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 19-20-21-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AELSIE X1 : 01 04 07%0D%0A 2/3 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AJEF X1 : 01-02-03-13-15-16-24-67-69%0D%0A 5/9 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0ARECAP du 10-04-2018 14:15:09%0D%0Ahttp://kenopronos.free-bb.eu © Tous droits réservés'
xxx@xxx:~$ echo ${test}
Mardi 10 avril 2018 - Midi :%0D%0A--------------------------------%0D%0A01 03 04 13 15 16 19 21 25 26 27 33 35 36 41 45 52 56 61 62%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 13-14-15-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 15-16-17-27-68%0D%0A 3/5 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AMAGNETICOTEST X1 : 19-20-21-27-16-68%0D%0A 4/6 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AELSIE X1 : 01 04 07%0D%0A 2/3 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0AJEF X1 : 01-02-03-13-15-16-24-67-69%0D%0A 5/9 2€X1 >> 2 € <<%0D%0A--------------------------------%0D%0A%0D%0ARECAP du 10-04-2018 14:15:09%0D%0Ahttp://kenopronos.free-bb.eu © Tous droits réservés
xxx@xxx:~$ echo ${#test}
800
xxx@xxx:~$