OVH Cloud OVH Cloud

remise a zero

20 réponses
Avatar
Eric Reinbold
Ave,

Je me débrouille pas mal en elisp, si, si ;)
Mais y'a un blème.
replace-regexp et re-search-forward ne me permettent pas de faire des choses
par lignes d'un fichier, ils trouvent et seulement là s'arrêtent.
Il me faudrait une function, par ex:

w:blablabla
w:reblablabla
Oh que celle-là non
w:blabla
Celle-là non plus
Et puis celle là non plus
w:etreblabla
w:reblabla
w:reblabla

je voudrais la chose suivante:

1w:blablabla
2w:reblablabla
Oh que celle-là non
1w:blabla
Celle-là non plus
Et puis celle là non plus
1w:blabla
2w:blabla
3w:blabla

C'est possible? Je sais pas si c'est clair?
Si ça inspire quelqu'un?
Eric

10 réponses

1 2
Avatar
Bastien
Eric Reinbold writes:

je voudrais la chose suivante:



Euh... c'est pas très clair, tu peux la refaire ?

--
Bastien
Avatar
Eric Reinbold
Bastien writes:

Eric Reinbold writes:

je voudrais la chose suivante:



Euh... c'est pas très clair, tu peux la refaire ?

--
Bastien


C'est bien ce que je pensais.

Vala le code:

(while (< (point) (point-max))
(setq numligne (+ numligne 1))
(if (equal (re-search-forward "^w:.+$")) <------J'arrive pas à dire"C'est faux"
(if (equal (% numligne 3) 0)
(progn (beginning-of-line)
(insert "%%vocalfont Times-Bold 14n")
(forward-line))
(if (equal (% (+ numligne 1) 3) 0)
(progn
(beginning-of-line)
(insert "%%vocalfont Times-Italic 14n")
(forward-line))
(progn
(beginning-of-line)
(insert "%%vocalfont Times 14n")
(forward-line))))
(setq numligne 0))) <------et cette ligne ne s'execute jamais


Reprenons:

w:blablabla
w:reblablabla
Oh que celle-là non
w:blabla
Celle-là non plus
Et puis celle là non plus
w:etreblabla
w:reblabla
w:reblabla
w:reblabla



je voudrais la chose suivante:

w:blablabla Times
w:reblablabla Times-Italic
Oh que celle-là non
w:blabla Times
Celle-là non plus
Et puis celle là non plus
w:reblabla Times
w:reblabla Times-Italic
w:reblabla Times-Bold
w:reblabla Times

ca devrait faire 12 1 1231





ce que j'arrive à faire c'est:

w:blablabla Times
w:reblablabla Times-Italic
Oh que celle-là non
w:blabla Times-Bold
Celle-là non plus
Et puis celle là non plus
w:reblabla Times
w:reblabla Times-Italic
w:reblabla Times-Bold
w:reblabla Times

et la ca fait 123 123 123

J'ai bon là?
Eric
Avatar
Matthieu Moy
Eric Reinbold writes:

(if (equal (re-search-forward "^w:.+$")) <------J'arrive pas à dire"C'est faux"



(not (re-search-forward "..." nil t))

?

--
Matthieu
Avatar
Eric Reinbold
Matthieu Moy writes:

Eric Reinbold writes:

(if (equal (re-search-forward "^w:.+$")) <------J'arrive pas à dire"C'est faux"



(not (re-search-forward "..." nil t))



Ca ne change rien, à part le fait que maintenant, il n'execute
plus que la deuxième partie.

Je voudrais que le if soit faux quand il ne trouve pas de "w:" dans la LIGNE.

w:blablabla <---- une ligne vrai
blabla <---- une autre ligne :) faux
w:blabla <---- oh, encore une ligne vrai

Me la suis-je t-il fait comprendre correctement-il?
(J'ose pas signer, ca me paraît pas clair du tout)
Avatar
Matthieu Moy
Eric Reinbold writes:

Je voudrais que le if soit faux quand il ne trouve pas de "w:" dans la LIGNE.



Ça va mieux en le disant.

(re-search-forward REGEXP &optional BOUND NOERROR COUNT)

Il faut positionner BOUND. Par exemple, à (line-end-position).

--
Matthieu
Avatar
Eric Reinbold
Matthieu Moy writes:

Eric Reinbold writes:

Je voudrais que le if soit faux quand il ne trouve pas de "w:" dans la LIGNE.



Ça va mieux en le disant.

(re-search-forward REGEXP &optional BOUND NOERROR COUNT)

Il faut positionner BOUND. Par exemple, à (line-end-position).

--
Matthieu



(line-end-position)???

C'est quoi donc?
Avatar
Matthieu Moy
Eric Reinbold writes:

(line-end-position)???

C'est quoi donc?



,----[ C-h f line-end-position RET ]
| line-end-position is a built-in function in `C source code'.
| (line-end-position &optional N)
|
| Return the character position of the last character on the current line.
| With argument N not nil or 1, move forward N - 1 lines first.
| If scan reaches end of buffer, return that position.
|
| The scan does not cross a field boundary unless doing so would move
| beyond there to a different line; if N is nil or 1, and scan starts at a
| field boundary, the scan stops as soon as it starts. To ignore field
| boundaries bind `inhibit-field-text-motion' to t.
|
| This function does not move point.
|
| [back]
`----

(se renseigner de toute urgence sur C-h f, C-h v, M-x apropos, ...)

--
Matthieu
Avatar
Eric Reinbold
Matthieu Moy writes:

Eric Reinbold writes:

Je voudrais que le if soit faux quand il ne trouve pas de "w:" dans la LIGNE.



Ça va mieux en le disant.

(re-search-forward REGEXP &optional BOUND NOERROR COUNT)

Il faut positionner BOUND. Par exemple, à (line-end-position).

--
Matthieu


.°-/ J'appais 'end-of-position, pas réveillé.
Sinon, a-y-est, a marche:
Pour le plaisir, il y a encore des choses à refaire (forward-line, etc)
mais bon, CA MARCHE.

(while (< (point) (point-max))
(setq numligne (+ numligne 1))
(if (re-search-forward "^w:.+" (line-end-position) t)
(if (equal (% numligne 3) 0)
(progn (beginning-of-line)
(insert "%%vocalfont Times-Bold 14n")
(forward-line))
(if (equal (% (+ numligne 1) 3) 0)
(progn
(beginning-of-line)
(insert "%%vocalfont Times-Italic 14n")
(forward-line))
(progn
(beginning-of-line)
(insert "%%vocalfont Times 14n")
(forward-line))))
(progn
(setq numligne 0)
(forward-line 2))))

Merci les gens,
Merci Matthieu,
Merci Marc, Jean et Luc,
Merci tatousse,
Merci quoi.
Avatar
Matthieu Moy
Eric Reinbold writes:

(if (re-search-forward "^w:.+" (line-end-position) t)


...
(progn


^^^^^
(setq numligne 0)
(forward-line 2))))



Le progn n'est pas nécessaire ici (mais il n'est pas forcément
nuisible).

--
Matthieu
Avatar
Matthieu Moy
"Florent Georges" writes:

Matthieu Moy wrote:

Il faut positionner BOUND. Par exemple, à (line-end-position).



Mmh, je n'ai fait que survoler le thread, mais il me semble que le PO
veut un traitement par ligne (ecrire la boucle qui va bien), et
utiliser en debut de ligne un :

(if (looking-at "w:...")
...



Oui, en faisant attention à un détail : looking-at cherche à matcher à
partir de (point), donc si on cherche n'importe où dans la ligne, il
faut (looking-at ".*w:...").

Attention aussi, looking-at n'est pas forcément par ligne :
(looking-at "xny") peut matcher un x en fin de ligne suivi d'un y en
début de ligne (mais vu que le `.' ne matche pas "n", le problème ne
se pose pas trop).

--
Matthieu
1 2