# Tronquer longueur texte



## symbol (5 Avril 2018)

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 : 


```
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 (5 Avril 2018)

```
...&msg=${RESULTATCONVERTI::159}"
```

Ah, nan, bash sous macOS est très vieux, mince, ça va pas marcher ça.

Avant d'appeler la commande curl:

```
RESULTATCONVERTI=$(echo "$RESULTATCONVERTI" | cut -c1-159)
```


----------



## symbol (5 Avril 2018)

Je vais essayer et te dire ce que ca donne.

Merci


----------



## symbol (7 Avril 2018)

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"


```
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

```
wc -m /Users/xxx/Desktop/RESULTATSSMS2.txt
```
mais comment "dire" que si valeur de wc - m > 159  alors envoi SMS normal  :-/


----------



## Membre supprimé 1129907 (7 Avril 2018)

```
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
```


----------



## symbol (7 Avril 2018)

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"
_


----------



## symbol (7 Avril 2018)

J'ai essayé ca :


```
#!/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 : 

```
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]
```


----------



## Membre supprimé 1129907 (7 Avril 2018)

Effectivement, c'est "-m" même si c'est plutôt identique 

```
-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 :

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


----------



## symbol (7 Avril 2018)

```
#!/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 :

```
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 "="


----------



## Membre supprimé 1129907 (7 Avril 2018)

Oups je n'avais pas fait attention à ça, il reste encore les espace autour du symbole "=" qui gênent.


----------



## byte_order (8 Avril 2018)

Sinon en Bash ya aussi ${#nomdelavariable} qui retourne la longueur.


```
# 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
```


----------



## symbol (10 Avril 2018)

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


----------



## Membre supprimé 1129907 (10 Avril 2018)

${RESULTATCONVERTI} = contenu de la variable (le texte complet)
${#RESULTATCONVERTI} = nombre de caractère du texte stocké dans la variable


```
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:~$
```


----------



## symbol (11 Avril 2018)

merci


----------

