Bonjour,

Je dois créer un script en groovy qui doit permettre de faire un remplacement de caractère dans un fichier.
Je suis malheureusement bloquée et je ne vois pas où je me trompe.

Le contexte est :
je reçois plusieurs fichiers (lÃ* j'ai mis un exemple de fichier dans le code ci-dessous), je dois vérifier que dans le fichier si le tag :25: (chaque tag commence par : suivi de 2 chiffres puis : Ã* nouveau, exemple :25 commence par AB, alors je dois vérifier dans les tags :61: si elle contient la valeur "///".
Si c'est le cas, je dois remplacer cette valeur par "//". Chaque nouvelle séquence dans un fichier commence par ":20:" et se termine par un tag ":64:".

Exemple de fichier reçu:
{1:F01 0000000000}{2:O9400000240919 00000000002409190745N}{4:
:20:0027182203245
:25:AB1234
:28C:262/1
:60F:C240918USD1,00
:62F:C240918USD1,00
:64:C240918USD1,00
-}
{1:F01 0000000000}{2:O9400000240919 00000000002409190745N}{4:
:20:0027182200001
:25:AB3456
:28C:262/1
:60F240918USD1,00
:61:2409160918DN1,00/ROC///TEST
/TEST
:86:/TEST
/TEST
:61:2409130918DN1070NTRFTEST//
/TEST
:86:/TEST
TEST
:61:2409170918DN91,22NTRFTEST/TEST//
/TEST
:86:/PT/FT/PY/TEST
:62F240918USD1,00
:64240918USD1,00
-}

Attendu (suppression des /// qui seront remplacés par // :

{1:F01 0000000000}{2:O9400000240919 00000000002409190745N}{4:
:20:0027182203245
:25:AB1234
:28C:262/1
:60F:C240918USD1,00
:62F:C240918USD1,00
:64:C240918USD1,00
-}
{1:F01 0000000000}{2:O9400000240919 00000000002409190745N}{4:
:20:0027182200001
:25:AB3456
:28C:262/1
:60F240918USD1,00
:61:2409160918DN1,00/ROC//TEST
/TEST
:86:/TEST
/TEST
:61:2409130918DN1070NTRFTEST//
/TEST
:86:/TEST
TEST
:61:2409170918DN91,22NTRFTEST/TEST//
/TEST
:86:/PT/FT/PY/TEST
:62F240918USD1,00
:64240918USD1,00
-}

Voici le code que j'ai fait mais qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
	// Fonction pour traiter le fichier
	def input = '''voir exemple au-dessus'''
    def outputLines = []
    def current25Tag = ''
 
    def insideBlock = false
    input.eachLine { line ->
        if (line.startsWith(':25:')) {
            // Si nous entrons dans un nouveau bloc :25:, nous devons stocker l'ancien
            if (insideBlock) {
                outputLines << current25Tag // Écrit le dernier :25: si un bloc était ouvert
                insideBlock = false
            }
            current25Tag = line // Stocke le tag :25:
            insideBlock = true // Indique que nous sommes dans un bloc :25:
        } else if (line.startsWith(':61:') && insideBlock) {
            // Vérifie si le tag :25: commence par "RO"
            if (current25Tag.startsWith(':25: RO')) {
                // Remplace "///" par "//" dans le tag :61:
                line = line.replaceAll('///', '//')
            }
            outputLines << line // Ajoute la ligne du tag :61:
        } else if (line.startsWith(':64:') && insideBlock) {
            outputLines << line // Écrit le tag :64:
            insideBlock = false // Fin du bloc :25:
        } else {
            outputLines << line // Ajoute les autres lignes sans modification
        }
    }
 
    // Écrit le contenu modifié dans le fichier de sortie
 
	def results = (input =~ outputLines).collect{ writer -> outputLines.each { writer.println(it) }}
	//def results = input.withWriter { writer -> outputLines.each { writer.println(it) }}
 
 
		// Sortie
		new StringReader((results.size() > 0) ? results.join('') : input)

Est-ce que vous voyez une erreur dans les boucles ou ailleurs?
Merci