« Module:IdentifierRACJ » : différence entre les versions

Nouvelle version bogue capture en double
Nouvelle version
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 1 : Ligne 1 :
local p = {}
local p = {}


-- Extrait : dd-500xxxx prioritairement, sinon dd-ddddddd qui n’est pas suivi de -ddd
function p.extraireNoDeDecision(frame)
function p.extraireNoDeDecision(frame)
     local texte = frame.args[1] or ""
     local texte = frame.args[1] or ""


     -- 1. Match un identifiant de type dd-500xxxx (avec frontières)
     -- 1. Essayer de capturer un identifiant 500xxxx
     local identifiant = string.match(texte, "(%f[%d]%d%d%-500%d%d%d%d%f[%D])")
     local identifiant = string.match(texte, "(%f[%d]%d%d%-500%d%d%d%d%f[%D])")
     if identifiant then
     if identifiant then
Ligne 10 : Ligne 11 :
     end
     end


     -- 2. Match un identifiant de type dd-ddddddd UNIQUEMENT s’il n’est pas suivi d’un -ddd
     -- 2. Sinon, chercher un identifiant dd-ddddddd NON suivi de -ddd
     for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
     for id in string.gmatch(texte, "%d%d%-%d%d%d%d%d%d%d") do
         local fullMatch = string.match(texte, id .. "%-%d%d%d")
         local startPos, endPos = string.find(texte, id, 1, true)
        if not fullMatch then
        if startPos then
            return id
            local suivant = string.sub(texte, endPos + 1, endPos + 4)
            if not suivant:match("^%-%d%d%d") then
                return id
            end
         end
         end
     end
     end
Ligne 21 : Ligne 25 :
end
end


-- Extrait tous les identifiants sauf celui de décision
function p.extraireNoDeDossier(frame)
function p.extraireNoDeDossier(frame)
     local texte = frame.args[1] or ""
     local texte = frame.args[1] or ""
   
 
     -- Extraire le premier identifiant, qu'il soit 500xxxx ou non
     -- Utilise la fonction précédente pour déterminer ce qui doit être exclu
     local decision = p.extraireNoDeDecision{ args = { texte } }
     local decision = p.extraireNoDeDecision{ args = { texte } }
    if decision == "" then return "" end
     local deja = { [decision] = true }
 
     local deja = {}
     local prefixesExclus = {}
     local prefixesExclus = {}
     local identifiants = {}
     local identifiants = {}
    deja[decision] = true


     -- 1. dd-ddddddd-ddd
     -- 1. dd-ddddddd-ddd
Ligne 42 : Ligne 44 :
     end
     end


     -- 2. dd-ddddddd (sauf si déjà inclus comme préfixe)
     -- 2. dd-ddddddd (sauf préfixes déjà capturés)
     for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
     for id in string.gmatch(texte, "(%d%d%-%d%d%d%d%d%d%d)") do
         if not deja[id] and not prefixesExclus[id] then
         if not deja[id] and not prefixesExclus[id] then