Welcome Guest! Log in
×

Notice

The forum is in read only mode.
Stambia versions 2.x, 3.x, S17, S18, S19 and S20 are reaching End of Support January, 15th, 2024. Please consider upgrading to the supported Semarchy xDI versions. See Global Policy Support and the Semarchy Documentation.

The Stambia User Community is moving to Semarchy! All the applicable resources have already been moved or are currently being moved to their new location. Read more…

Topic-icon Question Bean scripting Framework action

  • Aminatou
  • Aminatou's Avatar Topic Author
08 Mar 2017 09:41 - 08 Mar 2017 10:01 #1 by Aminatou
Bean scripting Framework action was created by Aminatou
Bonjour ,
J'utilise un composant "Bean scripting Framework action" avec un code testé sur éclipse.
Ce même code s’exécute avec erreur sur Stambia, il semble qu'il ne reconnait pas la bibliotheque ArrayList(voir code en rouge :ligne 41).


il ya aussi une deuxieme erreur concernant la classe "Matcher "
Class: Matcher not found in namespace : at Line: 8
Y'a t'il un moyen d'indiquer les bibliothèques à importer?

try {

File input = new File("C:\\Track and Trace\\TNI\\In_Progress\\O0621158550.txt");
File output = new File("C:\\Track and Trace\\TNI\\In_Progress\\2_new.txt");
File output3 = new File("C:\\Track and Trace\\TNI\\In_Progress\\3_new.txt");
String fichier= "";
String result = "";
List<String> matches;
Matcher m ;

FileReader fr = new FileReader (input);
BufferedReader reader = new BufferedReader (fr);

PrintWriter writer = new PrintWriter (new BufferedWriter (new FileWriter (output)));

String line = reader.readLine();

while (line != null)
{

fichier += line;
line = reader.readLine();
}
//traitement des chaines dupliqué
String[] partsCNI = fichier.split("CNI\\+");
String[] partsSTS = fichier.split("STS\\+");
for(int i=1;i<partsCNI.length; i++)
{
String[] cni_array= partsCNI.split("\\+");
String ps = cni_array[1];

String[] sts_array= partsSTS.split("\\+");
String psl = sts_array[3].split(":::")[0];

m = Pattern.compile("CNI\\+[0-9]+\\+"+ps+"(\\+[^\\+]*){3}\\+"+psl).matcher(fichier);
matches= new ArrayList<String>();
while(m.find()) {
matches.add(m.group(1));
}
if(matches.size()>1)//duplication
{
String toDelete = "CNI+"+partsCNI;
fichier = fichier.replace(toDelete,"");
System.out.println("duplicata ps "+ps);
}
else
{
//

}

}
writer.println (fichier);
reader.close();
fr.close();
writer.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Attachments:
Last edit: 08 Mar 2017 10:01 by Aminatou.
More
08 Mar 2017 15:34 #2 by risson
Replied by risson on topic Bean scripting Framework action
bonjour,

A priori ce n'est pas ArrayList qui pose problème. Essayez sans le <String>.
par exemple :
matches = new ArrayList();
matches.add("abc");
matches.add("def");
System.out.println(matches.toString());
// output: [abc, def]
  • Aminatou
  • Aminatou's Avatar Topic Author
08 Mar 2017 15:49 - 08 Mar 2017 16:44 #3 by Aminatou
Replied by Aminatou on topic Bean scripting Framework action
Ca ne donne plus d'erreur en enlevant le "String" mais j'ai toujours l'erreur au niveau de Matcher m ;
J'ai du me passer de la classe Matcher.

Entre temps ,j'ai aussi complété le code et d'autres bibliotheques ne sont pas aussi reconnu. Exemple:

File input_old = new File(input.getParent(), "O0621158550_old.txt");
Files.move(input.toPath(), input_old.toPath());
J'obtiens comme erreur:
Attempt to resolve method: move() on undefined variable or class name: Files :

Je l'ai remplacé par:
File input_old = new File("C:\\Track and Trace\\TNI\\In_Progress\\O0621158550_old.txt");
java.nio.file.Files.move(input.toPath(), input_old.toPath());

et j'obtiens comme erreur:
Error in method invocation: Static method move( sun.nio.fs.WindowsPath, sun.nio.fs.WindowsPath ) not found in class'java.nio.file.Files'
Last edit: 08 Mar 2017 16:44 by Aminatou.
More
08 Mar 2017 17:10 - 08 Mar 2017 17:10 #4 by Thomas BLETON
Replied by Thomas BLETON on topic Bean scripting Framework action
Avez-vous essayé d'importer ce qu'il faut au Beanshell Java pour connaître ces classes ?
Par exemple :
import java.util.regex.*;
import java.nio.file.*;
Last edit: 08 Mar 2017 17:10 by Thomas BLETON.
  • Aminatou
  • Aminatou's Avatar Topic Author
08 Mar 2017 17:14 #5 by Aminatou
Replied by Aminatou on topic Bean scripting Framework action
Oui j'ai essayé de les importer. Probablement pas au bon endroit.Pourriez vous m'indiquer ou mettre les import?
Attachments:
More
08 Mar 2017 17:15 #6 by Thomas BLETON
Replied by Thomas BLETON on topic Bean scripting Framework action
Petite remarque au passage : votre script semble analyser le contenu du fichier ligne par ligne et récupérer des segments de données.
Vous pouvez peut être envisager l'utilisation d'une metadata fichier Multirecord, ou de Transformation Scripting...
  • Aminatou
  • Aminatou's Avatar Topic Author
08 Mar 2017 17:20 - 08 Mar 2017 17:26 #7 by Aminatou
Replied by Aminatou on topic Bean scripting Framework action
C'est génial s'il existe d'autres méthodes.
J'aurais besoin d'un coup de main sur la méthodologie: comment lier les deux record entre eux et comment mettre en place les conditions?

Merci
Last edit: 08 Mar 2017 17:26 by Aminatou.
More
08 Mar 2017 17:33 - 08 Mar 2017 17:54 #8 by Thomas BLETON
Replied by Thomas BLETON on topic Bean scripting Framework action
La gestion des fichiers Multirecord dans Stambia permet de lire / écrire des fichiers à structure variable comme par exemple :
CUS;001;JOHN DOE
ADR;23 BRIDGE ST.;NEW YORK
ADR;67 BALL AV.;LOS ANGELES
CUS;002;MARTIN POTTER
ADR;11 BIG BIG ST.;LONDON

Ou encore des fichiers avec des enregistrements composés sur une même ligne :
001 JOHN DOE      23 BRIDGE ST.  NEW YORK   67 BALL AV. LOS ANGELES
002 MARTIN POTTER 11 BIG BIG ST. LONDON                            

Le Transformation Scripting est différent : il permet d'appliquer des scripts de transformation à la lecture d'un fichier, à la volée.
Ainsi pas besoin de transformer le fichier : votre mapping ou process le "voit" tel que transformé par Stambia.

Pour mieux vous guider il faudrait un petit exemple de fichier, et de ce que vous avez besoin de faire (vous pouvez envoyer cela au support si vous ne souhaitez pas l'exposer sur le forum).
Last edit: 08 Mar 2017 17:54 by Thomas BLETON.
  • Aminatou
  • Aminatou's Avatar Topic Author
08 Mar 2017 18:31 #9 by Aminatou
Replied by Aminatou on topic Bean scripting Framework action
Vous avez oubliez la réponse concernant les import :)
Le but de ses transformations est de supprimer les répétitions dans un fichier.txt .
Le fichier ci joint est constitué de plusieurs segments qui peuvent se répéter.Le séparateur de colonne dans chaque segment est le "+".
Du segment CNI(en rouge ) jusqu'au prochain segment CNI, on a un bloc d'information. Chaque bloc contient un segment STS (en blue)



L'objectif est de supprimer toutes les repetitions de bloc.

Un bloc est suposé etre répéter sous deux conditions:
si il existe des CNI ayant la meme valeur que la 3eme colonne du CNI (rose)
et pour le meme bloc, son STS (en rose ) est aussi en commun

En cas de repetion on supprime le premier bloc rencontré . A la fin le fichier doit être sans repetition.
Exemple: Bloc 1 est répété avec Bloc 2. Donc on supprime bloc1

NB: la valeur du segment STS correspond à la valeur qui se trouve dans le 5ème colonne avant les ":::"
Attachments: