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...).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal J. Bourguignon
Stéphane Dutailly 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}":
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 {}.
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}":
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}":