Nous sommes le Dim 20 Juil, 2025 03:17
Supprimer les cookies

[SciTE] Effacer des lignes

Sur le logiciel libre en général ou un logiciel libre en particulier

Mar 20 Sep, 2005 22:54

Salutations! C'est "remoi" avec mes problèmes en SciTE :)

Je voulais tourner ça :

Code: Tout sélectionner
[item 25]
skill=0
stackable=1
name=Epée courte
class=2
subclass=7
model=1542
quality=1
buyprice=35
sellprice=7
inventorytype=21
classes=07FFF
races=01FF
level=2
reqlevel=1
damage=1 3 0
delay=1900
language=1
material=1
sheath=3
durability=20


En ça :

Code: Tout sélectionner
[item 25]
name=Epée courte


Sans passer par le backstab car il y a plus de 250'000 lignes dans mon fichier.

Quelqu'un a une idée? peut être avec un autre éditeur de texte :?:
Rasalom

Messages : 9

Mar 20 Sep, 2005 23:12

Ben c'est moi aussi...

Je pense qu'avec les expressions régulières, tu doit pouvoir y arriver aussi. La syntaxe pour utiliser les expressions régulières est donné dans le fichier d'aide...

Mais franchement, je préfère de loin une épée bâtarde...
A+
Pernmith

Messages : 486
Géo : pas loin de Strasbourg

Mer 21 Sep, 2005 16:50

D'accord, je vais y jeter un coup d'oeil, merci ;)
Rasalom

Messages : 9

Mer 21 Sep, 2005 17:15

J'ai réussi à trouvé le caractère de début de ligne (^), mais je ne sais toujours pas comment effacer la ligne lorsque ^ apparait.
Rasalom

Messages : 9

Jeu 22 Sep, 2005 08:12

D'après ce que j'arrive à comprendre, les expressions régulières travaillent sur une ligne, elles ne s'étendent pas sur plusieurs lignes. Tu ne pourra donc pas supprimer directement une ligne avec les expressions régulières dans Scite.

Par contre, tu pourrais faire cela avec sed ou awk qui eux aussi savent gérer les expressions régulières. Sous Windows, tu pourra trouver sed et awk aussi je crois dans cygwin

A+
Pernmith

Messages : 486
Géo : pas loin de Strasbourg

Jeu 22 Sep, 2005 10:21

si tu veux faire des macros avec Scite, je te recommande de regarder du coté des scripts LUA : http://lua-users.org/wiki/SciteScripts

Cela fait parti de ma todo-list, je ne pourrais t'en dire plus. LUA est très intéressant car il permet d'étendre les facultés d'un programme très facilement, ce qui rend SCiTe encore plus puissant que puissant. :)
Attentyon, ponaytte maychante !
Téthis

Avatar de l’utilisateur
Messages : 3895
Géo : De passage chez les cathares

Jeu 22 Sep, 2005 10:47

Bien vu Thetis :wink: ,

J'avais pas pensé à LUA.
J'ai jeté un oeil, Ramsalom pourrait directement s'inspirer du script "Scite Clean White Lines" pour supprimer ses lignes inutiles.

A+
Pernmith

Messages : 486
Géo : pas loin de Strasbourg

Jeu 22 Sep, 2005 17:45

Très bien! Je vais me rensiegner sur ces fameux fichiers LUA. Merci a vous :!: :!:
Rasalom

Messages : 9

Jeu 22 Sep, 2005 18:24

J'ai vu le script que vous m'avez donné, en LUA.

Il est pas mal, il va falloir que je le modifie, car le fichier que j'ai contient des lignes de type Base De Donnée.

Explications :

Je veux effacer toutes les lignes qui commencent par skill.

Le code :

Code: Tout sélectionner
function stripWhiteLines(reportNoMatch)
    local count = 0
    local fs,fe = editor:findtext("^$", SCFIND_REGEXP) //ici on va effacer toutes les lignes blanches! si je met "^skill", il va effacer le début de ligne jusqu'au "l" de "skill".
    if fe then
        repeat
            count = count + 1
            editor:remove(fs,fe)
            fs,fe = editor:findtext("^$", SCFIND_REGEXP, fs)
        until not fe
        print("Removed " .. count .. " line(s).")
    elseif reportNoMatch then
        print("Document was clean already; nothing to do.")
    end
    return count
end


Ce script est donc très utile et je vais pouvoir me baser dessus afin de réaliser un script adapté à mon but. Mais si vous connaissez un script qui m'obtiendrait la réussite de mon opération, autant me donner un lien ;)

Merci a vous tous!
Rasalom

Messages : 9

Jeu 22 Sep, 2005 22:35

Tiens, c'est gore mais ça a le mérite de faire un truc. Toujours mieux qu'un "Hello SciTe!". :)
Code: Tout sélectionner
function removeBordel()
    local suppress = function (arg)
         local fs,fe = editor:findtext(arg, SCFIND_REGEXP)
         if fe then
            repeat
               editor:remove(fs,fe)
               fs,fe = editor:findtext(arg, SCFIND_REGEXP, fs)
            until not fe
         end
      end
      
   suppress("^skill.*")
   suppress("^quality.*")
   
   stripWhiteLines(nil)
end

Il suffit de mettre des suppress() avec les patterns regexp pour que ça efface le texte.

Puis on repasse un coup de suppression d'espace pour faire le ménage. Il y a moyen de faire sans en supprimant aussi les 1 ou 2 octets de fin de ligne (CR/LF), mais c'est encore plus gore ; trop de jeunes yeux innocents par ici.

Tout aussi coded-like-a-pork(tm), mais plus dans ce que tu souhaites
Code: Tout sélectionner
function removeBordel() --BadTripInSpace
   local name_start, name_end
   local fe, fs = editor:findtext("^.item.*", SCFIND_REGEXP)
   if fe then
      repeat
         print(editor:textrange(fe,fs))
         name_start, name_end = editor:findtext("^name.*", SCFIND_REGEXP, fs)
         print(editor:textrange(name_start, name_end))
         fe, fs = editor:findtext("^.item.*", SCFIND_REGEXP, fs)
      until not fe
   end
end
Attentyon, ponaytte maychante !
Téthis

Avatar de l’utilisateur
Messages : 3895
Géo : De passage chez les cathares

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit