EXCEL Compter occurrence

De knowledge
Aller à la navigation Aller à la recherche

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