EXCEL Compter occurrence
Description
Il n'y a pas de fonction qui compte le nombre d'occurrence d'un caractère dans une chaine.
On a une fonction =NBCAR(), qui correspond à len() ou length() des langages de de programmation, avec laquelle on compte les caractères d'une chaine.
La ruse consiste a faire la soustraction du nombre de caractère de la chaine complète avec la chaine à laquelle on a enlevé les caractères.
A | B | C | |
---|---|---|---|
1 | Le roi est mort ce soir | 23 | |
2 | L roi st mort c soir | 20 | |
3 | 3 |
- En A1 le texte a traiter.
- En B1 le nombre de caractères de A1 soit : =NBCAR(A1)
- En A2 le texte dont on a substitué les caractères "e" par un vide "" soit : =SUBSTITUE(A1;"e";"")
- En B2 le nombre de caractère de la chaine où on a supprimé les "e" soit : =NBCAR(A2)
- En B3 la différence de longueur entre la chaine complète et la chaine "nettoyée" soit : =B1-B2
On peut s'éviter tout les intermédiaires avec :
=NBCAR(A1)-NBCAR(SUBSTITUE(A1;"e";""))
Un autre exemple serait de vouloir compter le nombre de "1" dans un nombre binaire (voir l'article sur les bases numeriques). On a le nombre 42(0x24) qui est représenté en binaire par 00101010 comment compter le nombre de bits à 1?
=NBCAR(A1)-NBCAR(SUBSTITUE(A1;"1";""))
Dans ce cas on a 3 car 3 bits a 1.
Application : la parité en UART/RS232.
On a un caractère ASCII sur 7 bits. On va choisir "7" (le caractère "7" par le chiffre 7). son code ascii est conné par la fonction =CODE(A1) qui donne le code ascii de la première lettre de la chaine.
On le nombre de bits à "1" par:
=NBCAR(DECBIN(CODE(A1);7))-NBCAR(SUBSTITUE(DECBIN(CODE(A1);7);"1";""))
C'est une application des formules ci-dessus. La suite consiste à vérifier si ce nombre est pair =MOD(A1;2) donne 0 si pair et 1 si impair. C'est donc la parité. On ajoute ce bit en tête de l'octet et on aura donc toujours un nombre qui contiendra un nombre pair de bits à 1. La définition d'une parité paire.
=CONCATENER(MOD(NBCAR(DECBIN(CODE(A1);7))-NBCAR(SUBSTITUE(DECBIN(CODE(A1);7);"1";""));2);DECBIN(CODE(A1);7))
on peut s'en servir pour avoir la table des codes ASCII sur 7 bits des caractères A à Z ainsi que le code sur 8 bit avec parité envoyer pour un UART en parité PAIRE
Lettre | ASCII | binaire | UART |
---|---|---|---|
A | 65 | 1000001 | 01000001 |
B | 66 | 1000010 | 01000010 |
C | 67 | 1000011 | 11000011 |
D | 68 | 1000100 | 01000100 |
E | 69 | 1000101 | 11000101 |
F | 70 | 1000110 | 11000110 |
G | 71 | 1000111 | 01000111 |
H | 72 | 1001000 | 01001000 |
I | 73 | 1001001 | 11001001 |
J | 74 | 1001010 | 11001010 |
K | 75 | 1001011 | 01001011 |
L | 76 | 1001100 | 11001100 |
M | 77 | 1001101 | 01001101 |
N | 78 | 1001110 | 01001110 |
O | 79 | 1001111 | 11001111 |
P | 80 | 1010000 | 01010000 |
Q | 81 | 1010001 | 11010001 |
R | 82 | 1010010 | 11010010 |
S | 83 | 1010011 | 01010011 |
T | 84 | 1010100 | 11010100 |
U | 85 | 1010101 | 01010101 |
V | 86 | 1010110 | 01010110 |
W | 87 | 1010111 | 11010111 |
X | 88 | 1011000 | 11011000 |
Y | 89 | 1011001 | 01011001 |
Z | 90 | 1011010 | 01011010 |