🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#69
Author: Stéphane Dutailly
Date: Sun, 21 Oct 2012 10:05
33 lines
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
#70
Author: Pascal J. Bourguignon
Date: Sun, 21 Oct 2012 11:42
66 lines
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