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
Partager