Thread View: fr.comp.applications.emacs
2 messages
2 total messages
Started by Stéphane Dutailly
Sun, 21 Oct 2012 10:05
compter le nombre d'occurrences
Author: Stéphane Dutailly
Date: Sun, 21 Oct 2012 10:05
Date: Sun, 21 Oct 2012 10:05
33 lines
2411 bytes
2411 bytes
Bonjour,
Je souhaiterais pouvoir compter le nombre d'occurrences d'un mot dans un
fichier.
Concr�tement, dans un fichier tex, j'aimerais savoir combien de fois
l'expression << \begin{exercice} >> appara�t, et m�me, encore mieux,
combien de fois elle appara�t avant l'endroit o� se trouve le curseur
dans mon buffer.
Je n'ai pas trouv� de fonction permettant de faire cela, en
connaissez-vous une?
Sinon, en cherchant dans mon manuel, j'ai trouv� un exemple de programme
simple permettant de compter le nombre de mots dans un buffer:
(defun count-words-buffer ()
"Count the number of words in the current buffer;
print a message in the minibuffer with the result."
(interactive)
(save-excursion
(let ((count 0))
(goto-char (point-min))
(while (< (point) (point-max))
(forward-word 1)
(setq count (1+ count)))
(message "buffer contains %d words." count))))
Je me dis qu'il y a peut-�tre moyen d'adapter pour que le compteur
s'incr�mente � chaque occurrence du mot souhait� mais je ne sais pas
comment m'y prendre adapter le programme pr�c�dent (j'imagine qu'il faut
faire la recherche d'une expression r�guli�re...).
Merci d'avance pour votre aide,
St�phane
Re: compter le nombre d'occurrences
Author: Pascal J. Bourguignon
Date: Sun, 21 Oct 2012 11:42
Date: Sun, 21 Oct 2012 11:42
66 lines
3931 bytes
3931 bytes
St�phane Dutailly <dutaillys@yahoo.fr> writes:
> Bonjour,
>
> Je souhaiterais pouvoir compter le nombre d'occurrences d'un mot dans
> un fichier.
> Concr�tement, dans un fichier tex, j'aimerais savoir combien de fois
> l'expression << \begin{exercice} >> appara�t, et m�me, encore mieux,
> combien de fois elle appara�t avant l'endroit o� se trouve le curseur
> dans mon buffer.
>
> Je n'ai pas trouv� de fonction permettant de faire cela, en
> connaissez-vous une?
>
> Sinon, en cherchant dans mon manuel, j'ai trouv� un exemple de
> programme simple permettant de compter le nombre de mots dans un
> buffer:
> (defun count-words-buffer ()
> "Count the number of words in the current buffer;
> print a message in the minibuffer with the result."
> (interactive)
> (save-excursion
> (let ((count 0))
> (goto-char (point-min))
> (while (< (point) (point-max))
> (forward-word 1)
> (setq count (1+ count)))
> (message "buffer contains %d words." count))))
>
> Je me dis qu'il y a peut-�tre moyen d'adapter pour que le compteur
> s'incr�mente � chaque occurrence du mot souhait� mais je ne sais pas
> comment m'y prendre adapter le programme pr�c�dent (j'imagine qu'il
> faut faire la recherche d'une expression r�guli�re...).
Puisque tu veux compter les occurences, il faut que tu recherche apropos
les mots count ou occur:
M-x apropos RET occur RET donne une commande int�ressante: occur
M-x apropos RET count RET donne une commande encore mieux: count-matches
Donc, tu peux utiliser count-match. Mais �a compte apr�s le point, pas
avant.
(defun count-matches-previous (regexp &optional rstart rend interactive)
(interactive (keep-lines-read-args "How many matches for regexp"))
(count-matches regexp (point-min) (point) interactive))
Maintenant si tu veux compter juste les occurences sp�ciquement de
"\begin{exercice}":
(defun count-exercices (whole-buffer)
(interactive "P")
(let ((regexp "\\\\begin{exercice}"))
(if whole-buffer
(count-matches regexp (point-min) (point-max) t)
(count-matches regexp (point-min) (point) t))))
M-x count-exercices RET donne le compte des exercices avant le point.
C-u M-x count-exercices RET donne le compte des exercices dans tout le buffer.
--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads