Re: [ Utilisation de R dans les scripts]
On Wed, 07 Dec 2005 12:06:39 +0100 Francois.Bastardie@ifremer.fr wrote:
Salut Benjamin,
Je te remercie pour cette solution qui correspond à première vue tout à fait à nos besoins pour l'interfaçage entre Isis et R. Cependant, on a essayé d'installer Rserve sous Windows en suivant les consignes du site web...et ça marche pas. Le problème c'est que il nous manque visiblement un fichier Rserv.cfg pour lancer le serveur. As tu essayé de ton coté? Travailles tu exclusivement sous linux? Est-ce que ça marche mieux avec linux?
Je n'utilise que Linux et ca fonctionne tres bien, j'ai meme fait fonctionné l'exemple que j'ai envoyer.
D'autre part, quand tu dis que la prochaine version de Isis integrera les bibliothèque de Rserve, tu penses à la version 3.0.0? Sera t-il toujours nécessaire d'installer Rserve indépendamment d'Isis? En clair dois-je me préoccuper d'installer Rserve ou bien attendre que cela soit intégré dans Isis (si c'est possible)?
Il n'y aura que la librairie Java qui sera integrer a la prochaine release Isis (des la 2.0.25), ce qui permettra de ne pas s'embeter avec le classpath. Mais tu devras toujours installer rserve par toi meme sur R ps: par pitier pas de mail en prive pour des points techniques comme ceux la, plutot utiliser les listes de discussion devel ou user qui sont faites pour ca :(. -- Benjamin -------------------- email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
Bonjour Benjamin, Je cherche actuellement à réécrire le script Ecmascript "SimulateurES.simul()" de façon à ce qu'il permettre de faire communiquer Isis avec R. Je t'écris ce jour pour te demander si tu as une suggestion pour organiser ce travail. En effet pour l'instant n'étant pas familier encore avec les classes d'isis, mon écriture du script doit être souvent débuguée. Aussi, lorsque je sauve mes modifications du script, je lance une simulation (qui échoue...) et je vais voir le message d'erreur dans le log. Mon problème est que je dois non seulement fermer la fenetre 'simulation launcher' mais si je ne me trompe pas, je dois même fermer totalement Isis avant de relancer le script modifié...ce qui prend énormement de temps pour un débugage (recharge de la base, etc.). Aurais tu une autre manière de faire à me conseiller? recreer un mini-simulateur avec des paramètres d'entrée pour nourrir sim.simuler(param.getPopulations(), param.getMatriceNs(), param.getYearNumber())?? Je joins ici le script SimulateurES qui ne marche pas si tu as le temps de regarder. François //-------------------------------------------- writeln("coucou"); // communication Isis / R : // tous les ans (par ex. tous les 1er janvier) // pour chaque population // sont envoyés à des routines R : (i) l'abondance à ce pas de temps (residu de l'année précédente) et l'abondance des années précédentes. // (ii) les captures cumulées sur l'année précedente // (iii) la mortalité par pêche totale de l'année précédente appliquée au stock // ce que renvoie R à Isis reste à déterminer... var resManager = control.getResultatManager(); var simulateur = new Simulateur(db, control); // org.codelutin.dbobject.DBManager dbManager, SimulationControl control //où est donc definie cette classe Simulateur?? // On encapsule les pops et les effectifs dans l'objet // SimulationSuivi qui permet de suivre la pop. C'est a dire // de prendre en compte les repros et recrutements var populations = new Packages.java.util.Vector(); // un vecteur pour les obj SimulationSuivi var ListeAbondance = new Packages.java.util.HashMap(); //une table avec clé de matrices 'abondance' var listeDate = new Packages.java.util.Vector(); // un vecteur de date listeDate.add(new Integer(0)); listeDate.add(new Integer(12)); listeDate.add(new Integer(24)); listeDate.add(new Integer(36)); listeDate.add(new Integer(48)); listeDate.add(new Integer(60)); listeDate.add(new Integer(72)); listeDate.add(new Integer(84)); listeDate.add(new Integer(96)); listeDate.add(new Integer(108)); writeln("les dates choisies pour la pop"+pops.get(i).getNom()+ ":" +listeDate); for(var i=0; i<pops.size(); i++) // pour chaque pop { populations.add(new SimulationSuivi(pops.get(i), minit.get(i))); // add dans vecteur //export R : creer une matrice avec des semantics pour les classes d'age et les dates: var MatriceAbondance = MatrixFactory.create("Abondance"+pops.get(i).getNom(), // String name new Array( pops.get(i).getClasses(), // list for semantics listedate), new Array("Classes", "Dates")); // list for dimnames ListeAbondance.put(pops.get(i),MatriceAbondance); // put dans la HashMap writeln("la matrice abondance pour la pop"+pops.get(i).getNom()+ ":" +MatriceAbondance); } writeln("deb de simuler"); writeln("2"); //construction des regles var regles = this.initRegle(regle); var gestionMetier= new GestionLicenceMetier_interdits(); //writeln("taille du tableau des regles:"+regle.length); while(date.getAnnee()<nbAnnee){ MetiersInterdits.clear(); writeln("la date:"+date.toString()); control.setText("la date: "+date.toString()); db.beginTransaction(); if(regles.length!=0){ gestionMetier.clear(); // remise a 0 des metiers interdits et des licences if(date.getMois().getNumMois() == 0){ // on est au mois de janvier for(var x=0; x<populations.size(); x++) { // rappel : 'populations' c'est un vecteur d'objets simulationSuivi var popcourante=populations.get(x).getPop(); var temp= populations.get(x).getN().SumOverDim(1); //eliminer la dimension zone (matrice abondance => dim 0:classe ; dim 1: zone) for (var classe=0;classe < popcourante.getClasses().size();classe++) { //chercher dans la HashMap et ajouter les valeurs d'abondance pour chaque classe à la date ListeAbondance.get(popcourante).setValue(classe,date.getDate(),temp.getValue(classe,0)); } populations.get(x).razCaptureCumulee(); //remise à 0 des captures ?? writeln("outputs for R"); var Separateur=Packages.java.io.File.separator; var chemin=Packages.fr.ifremer.Config.EXPORTPATH+Separateur+nomsimu+"-"+formatteur.format(dateexport)+Separateur; var creation= new Packages.java.io.File(chemin); creation.mkdirs(); var fichier=new Packages.java.io.FileWriter(chemin+populations.get(x).getPop()+"abundancesForR.txt"); var buffer=new Packages.java.io.BufferedWriter(fichier); buffer.write(matrice); buffer.close(); fichier.close(); // puis appel ligne de commande R pour XSA sous FLR (le resultat influe sur les mesures de gestion // a prendre pour l'année suivante...) //Rconnection c = new Rconnection(); //REXP x = c.eval("R.version.string"); //System.out.println(x.asString()); } } // les resultats des routines R renvoient des objets qui influent sur la suite du code // c'est à dire les règles de gestion... var allMetiers= SiMatrice.getListMetiers() for(var i=0; i<allMetiers.size(); i++){ var metier= allMetiers.get(i); control.setText("la date: "+date.toString()+" - Action Avant - métier: "+metier.getNom()); // writeln("metier:"+metier.getNom()); for(var r=0; r< regles.length;r++){ var _regle = regles[r]; // writeln("dans simuler, nomRegle ="+_regle.getNom()); // control.setText("la date: "+date.toString()+" - ActionAvant Regle: "+ _regle.getNom()+" - Metier: "+metier.getNom()); var _gestionMetier = gestionMetier; // writeln("metier:"+metier); // writeln("populations:"+populations); // writeln("gestionMetier:"+_gestionMetier); // writeln("code parametre:"+_regle.parametre); _regle.parametre(date,metier,populations,_gestionMetier); if (_regle.oldValueCondition == undefined ) _regle.oldValueCondition = new Object(); _regle.oldValueCondition[metier.getNom()] = _regle.condition(_regle.p); if(_regle.oldValueCondition[metier.getNom()]){ gestionMetier = _regle.actionAvant(_regle.p); } } } } // Sauvegarde de l'effort // 20041109 suppression de la sauvegarde apres reecriture du simulateur //bb for (var k=0; k<populations.size(); k++){ writeln("CALCULMOIS"); writeln("pop= "+pops.get(k).toString()); control.setText("la date: "+date.toString()+" Calcul mois Pop: "+pops.get(k).toString()); simulateur.calculMois(SiMatrice, populations.get(k), date); } writeln("APRES CALCUL"); if(regles.length!=0){ var allMetiers= MetierFactory.findAll(); for(var i=0; i<allMetiers.size(); i++){ var metier = allMetiers.get(i); for(var r=0; r!= regles.length;r++){ var _regle = regles[r]; control.setText("la date: "+date.toString()+" - ActionApres - Metier: "+metier.getNom()); //ajout pour la correction du bug #1 30/08/2001 _regle.parametre(date,metier,populations,gestionMetier); //fin bug #1 if(_regle.condition(_regle.p, _regle.oldValueCondition[metier.getNom()])){ //on passe metier qui est le metier en cours de traitement gestionMetier = _regle.actionApres(_regle.p); } } } } control.setText("la date: "+date.toString()+" Ajout des matrices dans resultat"); writeln("Verif rejet dans simulateurES"); // ajout des resultats Rejet et debarquement for(var i=0; i<populations.size(); i++){ var suivi = populations.get(i); var matRejet = suivi.getRejet(date); var haveRejet = matRejet != null; writeln("matrice de rejet "+date+" "+suivi.getPop()+":"+matRejet); if(!haveRejet){ matRejet = MatrixFactory.create("Rejet par metier", new Array(SiMatrice.getListStrategies(), SiMatrice.getListMetiers(), suivi.getInfoClasse(), suivi.getInfoZone()), new Array("Strategies", "Metiers", "Classes", "Zones")); } if(haveRejet || date.getDate() == 0){ //ajout du rejet // on ajoute les rejets que s'il y en a, car avec la nouvelle implantation de rendu des resultats // les matrices manquantes seront automatiquement remplacÃ1/2S par des matrices nulle // Mais quoi qu'il arrive on en met un pour qu'il apparaisse dans la combo resManager.addResult(date, suivi.getPop(), matRejet); } //ajout du debarquement var pop = suivi.getPop(); var matDebarquement = MatrixFactory.create(suivi.getCapture()); writeln("matrice suivi = " + matDebarquement); matDebarquement.minus(matRejet); matDebarquement.setName("Debarquement par metier"); resManager.addResult(date, pop, matDebarquement); } // demontage des regles par les logs control.setText("la date: "+date.toString()+" démontage des règles"); writeln("rollback"); db.rollbackTransaction(); date.inc(); if(control.isStopSimulationRequest()) break; var runtime= java.lang.Runtime.getRuntime(); var memoireutil=new Packages.java.lang.Float(runtime.totalMemory()/1048576.0) writeln("Memoire Utilisee: "+memoireutil.intValue()+"Mo"); writeln("fin du pas de temps"); } var dateexport=new Packages.java.util.Date(); var formatteur= new Packages.java.text.SimpleDateFormat("dd_MM_yyyy-HHmm"); writeln("Fin de simulation"); return 0; // Si vous souhaitez faire des exports avant la sauvegarde, il vous suffit // de retirer le return ci-dessus et de choisir les bon exports en dessous var dateexport=new Packages.java.util.Date(); var formatteur= new Packages.java.text.SimpleDateFormat("dd_MM_yyyy-HHmm"); var Separateur=Packages.java.io.File.separator; var chemin=Packages.fr.ifremer.Config.EXPORTPATH+Separateur+nomsimu+"-"+formatteur.format(dateexport)+Separateur; var creation= new Packages.java.io.File(chemin); creation.mkdirs(); var fichier=new Packages.java.io.FileWriter(chemin+"Parametres.txt"); var buffer=new Packages.java.io.BufferedWriter(fichier); buffer.write(chaineparam); buffer.close(); fichier.close(); /* fichier=new Packages.java.io.FileWriter(Packages.java.io.File(creation, "Abondances.csv")); buffer=new Packages.java.io.BufferedWriter(fichier); Export.AbondancesSteph(pops,resManager,buffer); buffer.close(); fichier.close(); */ fichier=new Packages.java.io.FileWriter(chemin+"Biomasses.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.BiomassesSteph(pops,resManager,buffer); buffer.close(); fichier.close(); /* fichier=new Packages.java.io.FileWriter(chemin+"CapturesNombre.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.CapturesNombreSteph(pops,resManager,buffer); buffer.close(); fichier.close(); */ fichier=new Packages.java.io.FileWriter(chemin+"CapturesPoids.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.CapturesPoidsSteph(pops,resManager,buffer); buffer.close(); fichier.close(); /* fichier=new Packages.java.io.FileWriter(chemin+"EffortsMetier.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.EffortsMetierSteph(pops,resManager,buffer); buffer.close(); fichier.close(); fichier=new Packages.java.io.FileWriter(chemin+"RejetsNombre.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.RejetsNombreSteph(pops,resManager,buffer); buffer.close(); fichier.close(); fichier=new Packages.java.io.FileWriter(chemin+"RejetsPoids.csv"); buffer=new Packages.java.io.BufferedWriter(fichier); Export.RejetsPoidsSteph(pops,resManager,buffer); buffer.close(); fichier.close(); */ writeln("fin du script de simulation"); return 0; Benjamin POUSSIN a écrit:
On Wed, 07 Dec 2005 12:06:39 +0100 Francois.Bastardie@ifremer.fr wrote:
Salut Benjamin,
Je te remercie pour cette solution qui correspond à première vue tout à fait à nos besoins pour l'interfaçage entre Isis et R. Cependant, on a essayé d'installer Rserve sous Windows en suivant les consignes du site web...et ça marche pas. Le problème c'est que il nous manque visiblement un fichier Rserv.cfg pour lancer le serveur. As tu essayé de ton coté? Travailles tu exclusivement sous linux? Est-ce que ça marche mieux avec linux?
Je n'utilise que Linux et ca fonctionne tres bien, j'ai meme fait fonctionné l'exemple que j'ai envoyer.
D'autre part, quand tu dis que la prochaine version de Isis integrera les bibliothèque de Rserve, tu penses à la version 3.0.0? Sera t-il toujours nécessaire d'installer Rserve indépendamment d'Isis? En clair dois-je me préoccuper d'installer Rserve ou bien attendre que cela soit intégré dans Isis (si c'est possible)?
Il n'y aura que la librairie Java qui sera integrer a la prochaine release Isis (des la 2.0.25), ce qui permettra de ne pas s'embeter avec le classpath.
Mais tu devras toujours installer rserve par toi meme sur R
ps: par pitier pas de mail en prive pour des points techniques comme ceux la, plutot utiliser les listes de discussion devel ou user qui sont faites pour ca :(.
-- -------------------------------------------------------- François Bastardie IFREMER - département EMH (Ecologie et Modèles pour l'Halieutique) Rue de l'Ile d'Yeu BP 21105 44311 NANTES Cedex 03 Tél : 02 40 37 41 64 Fax : 02 40 37 40 75 E-mail : francois.bastardie@ifremer.fr
Bonjour Benjamin, J'ai un petit problème avec l'éditeur EcmaScript de Isis...quand je fais des modifications sur un script existant il me trouve souvent des erreurs...ce qui est normal! (mais seulement dans la majorité des cas ce qui n'est pas normal !) En effet je ne crois pas me tromper en disant qu'il me trouve des erreurs dans mon script alors qu'il n'y en a pas... deux preuves : (i) quand je mets en commentaire l'intégralité du script en laissant return(0); il me trouve encore des erreurs. (ii) quand je quitte isis et que je recharge la base avec exactement le même script (je l'exporte alors qu'il indique qu'il contient une erreur) alors là il ne trouve plus d'erreur et ça tourne. n'y aurait t-il pas moyen d'avoir des messages d'eereur de syntaxe du script plus développé plus explicite pour eviter de chercher trop longtemps les erreurs? D'autre part j'ai un problème avec Rserve et le chargement des bases isis : il semble y avoir une instabilité de conflit entre ces deux parties : parfois la base s'ouvre sans les simulations existantes, parfois les scripts s'ouvrent sans toutes les méthodes. J'ai beau relancé ici il me refait le coup...mais au bout de quelque fois ça marche ! et çà a l'air e dépendre de Rserve en background... Pourrais tu voir si il y aurait pas une instabilité quelque part? Merci d'avance et A+
rebonjour, Bon j'ai résolu mon deuxième problème avec l'aide d'Hillaire, c'était une erreur de débutant : je lançais isis via le .jar et non via le .bat et donc il n'y avait pas assez de ram pour recharger les simulations existantes ! En revanche, le premier problème tiens toujours, à savoir un message d'erreur permanent sous l'éditeur de script alors que la simulation tourne parfaitement à partir de celui-ci. Y'aurait-il des mots clés pas reconnu par le debugueur interne à FESI?? A+ Bonjour Benjamin, J'ai un petit problème avec l'éditeur EcmaScript de Isis...quand je fais des modifications sur un script existant il me trouve souvent des erreurs...ce qui est normal! (mais seulement dans la majorité des cas ce qui n'est pas normal !) En effet je ne crois pas me tromper en disant qu'il me trouve des erreurs dans mon script alors qu'il n'y en a pas... deux preuves : (i) quand je mets en commentaire l'intégralité du script en laissant return(0); il me trouve encore des erreurs. (ii) quand je quitte isis et que je recharge la base avec exactement le même script (je l'exporte alors qu'il indique qu'il contient une erreur) alors là il ne trouve plus d'erreur et ça tourne. n'y aurait t-il pas moyen d'avoir des messages d'eereur de syntaxe du script plus développé plus explicite pour eviter de chercher trop longtemps les erreurs? D'autre part j'ai un problème avec Rserve et le chargement des bases isis : il semble y avoir une instabilité de conflit entre ces deux parties : parfois la base s'ouvre sans les simulations existantes, parfois les scripts s'ouvrent sans toutes les méthodes. J'ai beau relancé ici il me refait le coup...mais au bout de quelque fois ça marche ! et çà a l'air e dépendre de Rserve en background... Pourrais tu voir si il y aurait pas une instabilité quelque part? Merci d'avance et A+
On Mon, 19 Dec 2005 16:36:39 +0100 Francois.Bastardie@ifremer.fr wrote:
Bonjour Benjamin,
bonjour,
J'ai un petit problème avec l'éditeur EcmaScript de Isis...quand je fais des modifications sur un script existant il me trouve souvent des erreurs...ce qui est normal! (mais seulement dans la majorité des cas ce qui n'est pas normal !) En effet je ne crois pas me tromper en disant qu'il me trouve des erreurs dans mon script alors qu'il n'y en a pas... deux preuves : (i) quand je mets en commentaire l'intégralité du script en laissant return(0); il me trouve encore des erreurs. (ii) quand je quitte isis et que je recharge la base avec exactement le même script (je l'exporte alors qu'il indique qu'il contient une erreur) alors là il ne trouve plus d'erreur et ça tourne.
n'y aurait t-il pas moyen d'avoir des messages d'eereur de syntaxe du script plus développé plus explicite pour eviter de chercher trop longtemps les erreurs?
Je n'ai jamais eu ca :(. Normalement tu peux voir les erreurs dans les fenetres de log ou sur la sortie standard ou d'erreur. Comment sais-tu qu'il y a des erreurs ? (log, message, autre ...) Sans le script je ne peux pas t'aider, mais surtout, je ne pense pas pouvoir t'aider sans te voir travailler :(. La personne ayant ecrit de le plus de script est hilaire, a-t-il deja eu ce type d'erreur ? -- Benjamin -------------------- email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
Salut,
En effet je ne crois pas me tromper en disant qu'il me trouve des erreurs dans mon script alors qu'il n'y en a pas... deux preuves : (i) quand je mets en commentaire l'intégralité du script en laissant return(0); il me trouve encore des erreurs. (ii) quand je quitte isis et que je recharge la base avec exactement le même script (je l'exporte alors qu'il indique qu'il contient une erreur) alors là il ne trouve plus d'erreur et ça tourne.
n'y aurait t-il pas moyen d'avoir des messages d'eereur de syntaxe du script plus développé plus explicite pour eviter de chercher trop longtemps les erreurs?
Je n'ai jamais eu ca :(.
Normalement tu peux voir les erreurs dans les fenetres de log ou sur la sortie standard ou d'erreur.
Comment sais-tu qu'il y a des erreurs ? (log, message, autre ...)
OK voilà comment je fais : dans la fenetre EcmaScriptEdit je sauve mon script avec le bouton 'save'...c'est alors qu'il me dit en bas de la fenêtre :"il y a des erreurs dans votre méthode"...mais le script tourne si je lance une simulation...de toute mainère, j'ai remarqué que si il y a une erreur de syntaxe alors le corps du script est copié dans le fichier erreur.txt...dans le cas contraire il y a une FESI exception de lancé pour une autre erreur, non?... Il arrive qu'en fermant isis et en le redemarrant l'erreur disparaisse. mais là mon script a une erreur permanente ce qui est très génant car je ne sais pas où débugguer quand je le modifie à nouveau...
Sans le script je ne peux pas t'aider, mais surtout, je ne pense pas pouvoir t'aider sans te voir travailler :(.
je t'envoie le script si jamais (il m'indique qu'il contient une erreur alors qu'il tourne) mais il mélange R et Ecmascript et donc il requiert Rserve et aussi des librairies R supplémentaires à installer dans le workspace d R (tel que 'FLCore' en fichier joint)... A propos je recherche aussi une méthode qui me permette d'obtenir la liste des noms de zones/secteur de chaque population...j'ai essayé ça mais ça marche pas: //var unedate = new Packages.fr.ifremer.nodb.Date(); //var ZoneNames = new Packages.java.util.ArrayList( resManager.getMatrix(unedate,pops.get(i), "Abondance").getSemantics(1) ); //for(var iz=ZoneNames.iterator(); iz.hasNext();) // { // var z=iz.next(); // var izz = 0; // izz = izz+1; // index pour R // c.voidEval( "dimnames(myFLQuant)$area["+izz+"] <-"+z.getNom()+""); // a verifier si renvoie ts les noms // } Merci et A+ -- -------------------------------------------------------- François Bastardie IFREMER - département EMH (Ecologie et Modèles pour l'Halieutique) Rue de l'Ile d'Yeu BP 21105 44311 NANTES Cedex 03 Tél : 02 40 37 41 64 Fax : 02 40 37 40 75 E-mail : francois.bastardie@ifremer.fr
On Mon, 19 Dec 2005 17:40:32 +0100 Francois.Bastardie@ifremer.fr wrote: ...
OK voilà comment je fais : dans la fenetre EcmaScriptEdit je sauve mon script avec le bouton 'save'...c'est alors qu'il me dit en bas de la fenêtre :"il y a des erreurs dans votre méthode"...mais le script tourne si je lance une simulation...de toute mainère, j'ai remarqué que si il y a une erreur de syntaxe alors le corps du script est copié dans le fichier erreur.txt...dans le cas contraire il y a une FESI exception de lancé pour une autre erreur, non?... Il arrive qu'en fermant isis et en le redemarrant l'erreur disparaisse. mais là mon script a une erreur permanente ce qui est très génant car je ne sais pas où débugguer quand je le modifie à nouveau...
s'il y a une erreur dans les logs, il me faudrait l'erreur pour que je sache exactement ce qui se passe.
Sans le script je ne peux pas t'aider, mais surtout, je ne pense pas pouvoir t'aider sans te voir travailler :(.
...
A propos je recherche aussi une méthode qui me permette d'obtenir la liste des noms de zones/secteur de chaque population...j'ai essayé ça mais ça marche pas:
pourquoi ne pas utiliser la methode getZonePopulation() sur l'objet Population ? elle retourne tous les secteurs utilises par la population. http://isis-fish.labs.libre-entreprise.org/api/isis-fish/version2/fr/ifremer...) donc pops.get(i).getZonePopulation().getAllSecteur()
//var unedate = new Packages.fr.ifremer.nodb.Date(); //var ZoneNames = new Packages.java.util.ArrayList( resManager.getMatrix(unedate,pops.get(i), "Abondance").getSemantics(1) ); //for(var iz=ZoneNames.iterator(); iz.hasNext();) // { // var z=iz.next(); // var izz = 0; // izz = izz+1; // index pour R // c.voidEval( "dimnames(myFLQuant)$area["+izz+"] <-"+z.getNom()+""); // a verifier si renvoie ts les noms // }
Merci et A+
-- -------------------------------------------------------- François Bastardie
IFREMER - département EMH (Ecologie et Modèles pour l'Halieutique) Rue de l'Ile d'Yeu BP 21105 44311 NANTES Cedex 03 Tél : 02 40 37 41 64 Fax : 02 40 37 40 75 E-mail : francois.bastardie@ifremer.fr
-- Benjamin -------------------- email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
Salut, je voudrais savoir comment utiliser des méthodes java telle que par exemple celle de la classe String dans les scripts de Isis, comme ci-dessous : var essai = "salut-salut"; essai.replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN")); ça marche sous java mais ça ne marche pas sous isis car l'éditeur ne reconnait pas visiblement la méthode String.replaceAll()...c'est à cause de l'inexistence de typage sous Ecmascript?? comment faire alors? j'ai essayé aussi : var leNom = lesNomsDeZones.get(new Integer(y)).getNom().replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN")); // eliminer les signes '-' dans les noms de secteur car bug avec R ! var regex = new RegExp("-"); leNom = leNom.replace(regex, "IN"); ça marche pas mieux... Merci et A+ -- -------------------------------------------------------- François Bastardie IFREMER - département EMH (Ecologie et Modèles pour l'Halieutique) Rue de l'Ile d'Yeu BP 21105 44311 NANTES Cedex 03 Tél : 02 40 37 41 64 Fax : 02 40 37 40 75 E-mail : francois.bastardie@ifremer.fr
On Tue, 20 Dec 2005 14:29:20 +0100 Francois.Bastardie@ifremer.fr wrote:
var essai = "salut-salut"; essai.replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN"));
en fait, il faut juste faire l'inverse je pense :) var essai = new Packages.java.lang.String("salut-salut"); essai.replaceAll("-", "IN"); car sinon tu ne creer pas un objet string java mais un objet string ECMAScript et donc tu disposes des methodes ECMAScript sur les string mais pas java. -- Benjamin -------------------- email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
Bonjour, Dans le même ordre d'idées que le mail d'hier (=utiliser des classes java dans isis), je me demande si j'ai le droit d'écrire ça dans un script : var PBigDecimal=Packages.java.math.BigDecimal; var divisor = new PBigDecimal(12); var BigDate = new PBigDecimal((idate+1)); var res = bigDate.divideAndRemainder(divisor, new packages.java.math.MathContext (new Integer(3))); var year = res [0]; // 0 à 10 var season = res[1]; // 1 à 12 le but est de scinder une date de isis de 0 à 119 en mois (de 0 à 12) et en année de (0 à 10 dans cet exemple). mais je ne sais pas si Packages.java.math est accessible depuis isis. En fait c'est ma question. Merci et A+ Salut, je voudrais savoir comment utiliser des méthodes java telle que par exemple celle de la classe String dans les scripts de Isis, comme ci-dessous : var essai = "salut-salut"; essai.replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN")); ça marche sous java mais ça ne marche pas sous isis car l'éditeur ne reconnait pas visiblement la méthode String.replaceAll()...c'est à cause de l'inexistence de typage sous Ecmascript?? comment faire alors? j'ai essayé aussi : var leNom = lesNomsDeZones.get(new Integer(y)).getNom().replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN")); // eliminer les signes '-' dans les noms de secteur car bug avec R ! var regex = new RegExp("-"); leNom = leNom.replace(regex, "IN"); ça marche pas mieux... Merci et A+ -- -------------------------------------------------------- François Bastardie IFREMER - département EMH (Ecologie et Modèles pour l'Halieutique) Rue de l'Ile d'Yeu BP 21105 44311 NANTES Cedex 03 Tél : 02 40 37 41 64 Fax : 02 40 37 40 75 E-mail : francois.bastardie@ifremer.fr _______________________________________________ Isis-fish-devel mailing list Isis-fish-devel@lists.labs.libre-entreprise.org http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-devel
On Wed, 21 Dec 2005 09:50:23 +0100 Francois.Bastardie@ifremer.fr wrote:
var PBigDecimal=Packages.java.math.BigDecimal; var divisor = new PBigDecimal(12); var BigDate = new PBigDecimal((idate+1)); var res = bigDate.divideAndRemainder(divisor, new packages.java.math.MathContext (new Integer(3))); var year = res [0]; // 0 à 10 var season = res[1]; // 1 à 12
le but est de scinder une date de isis de 0 à 119 en mois (de 0 à 12) et en année de (0 à 10 dans cet exemple).
pourquoi ne pas demander a la date de te les données ? var year = date.getAnnee(); // date doit etre un objet fr.ifremer.nodb.Date var mois = date.getMois().getNumMois() + 1; // +1 car sinon de 0 à 11 http://isis-fish.labs.libre-entreprise.org/api/isis-fish/version2/fr/ifremer...) http://isis-fish.labs.libre-entreprise.org/api/isis-fish/version2/fr/ifremer...) http://isis-fish.labs.libre-entreprise.org/api/isis-fish/version2/fr/ifremer...)
mais je ne sais pas si Packages.java.math est accessible depuis isis. En fait c'est ma question.
Je ne vois pas pourquoi tu n'aurais pas acces au package math. Mais au niveau algo, je pense qu'il y a beaucoup plus simple, mais comme je ne comprend pas exactement ce que tu cherches a faire je ne peux pas plus t'aider. Sinon pour tester tu peux tres bien faire ca dans isis. Tu crees un objet test avec une methode test instancier. Tu mets du script dedans, tu sauves et tu cliques sur instancier Tu vois apparaitre dans la zone texte du bas, ce qui est retourne par la methode. par exemple si la methode est return "toto" + "titi"; tu auras comme resultat "tototiti" -- Benjamin -------------------- email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
sur les objets date de isis tu à les méthodes getDate() renvoie l'entier correspondant à l'année getMois().getNumMois() renvoie l'entier correspondant au mois qui te permets de faire ce que tu veux Pour la librairie math à priori je vois pas de raison pour que tu puisses pas l'utiliser. Mais là Benjamin te dira ça mieux que moi A+ Hilaire Francois.Bastardie@ifremer.fr a écrit:
Bonjour,
Dans le même ordre d'idées que le mail d'hier (=utiliser des classes java dans isis), je me demande si j'ai le droit d'écrire ça dans un script :
var PBigDecimal=Packages.java.math.BigDecimal; var divisor = new PBigDecimal(12); var BigDate = new PBigDecimal((idate+1)); var res = bigDate.divideAndRemainder(divisor, new packages.java.math.MathContext (new Integer(3))); var year = res [0]; // 0 à 10 var season = res[1]; // 1 à 12
le but est de scinder une date de isis de 0 à 119 en mois (de 0 à 12) et en année de (0 à 10 dans cet exemple).
mais je ne sais pas si Packages.java.math est accessible depuis isis. En fait c'est ma question.
Merci et A+
Salut,
je voudrais savoir comment utiliser des méthodes java telle que par exemple celle de la classe String dans les scripts de Isis, comme ci-dessous :
var essai = "salut-salut"; essai.replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN"));
ça marche sous java mais ça ne marche pas sous isis car l'éditeur ne reconnait pas visiblement la méthode String.replaceAll()...c'est à cause de l'inexistence de typage sous Ecmascript?? comment faire alors?
j'ai essayé aussi : var leNom = lesNomsDeZones.get(new Integer(y)).getNom().replaceAll(new Packages.java.lang.String("-"),new Packages.java.lang.String("IN")); // eliminer les signes '-' dans les noms de secteur car bug avec R ! var regex = new RegExp("-"); leNom = leNom.replace(regex, "IN");
ça marche pas mieux...
Merci et A+
-- Hilaire Drouineau IFREMER, département EMH Centre de Nantes - BP 21105 - 44311 Nantes Cedex 3 tel : +33 (0)2 40 37 43 06 - fax : +33 (0)2 40 37 40 75 email : hilaire.drouineau@ifremer.fr - web : http://www.ifremer.fr *****************************************************************
ouais, j'ai déjà eu des erreurs signalées alors que le script était bon. Ca arrivait quand il y avait beaucoup de commentaires imbriqués les uns dans les autres. En fermant ISIS, je crois que ça me mettait qu'il était valide A+ Hilaire Francois.Bastardie@ifremer.fr a écrit:
rebonjour,
Bon j'ai résolu mon deuxième problème avec l'aide d'Hillaire, c'était une erreur de débutant : je lançais isis via le .jar et non via le .bat et donc il n'y avait pas assez de ram pour recharger les simulations existantes !
En revanche, le premier problème tiens toujours, à savoir un message d'erreur permanent sous l'éditeur de script alors que la simulation tourne parfaitement à partir de celui-ci. Y'aurait-il des mots clés pas reconnu par le debugueur interne à FESI?? A+
Bonjour Benjamin,
J'ai un petit problème avec l'éditeur EcmaScript de Isis...quand je fais des modifications sur un script existant il me trouve souvent des erreurs...ce qui est normal! (mais seulement dans la majorité des cas ce qui n'est pas normal !) En effet je ne crois pas me tromper en disant qu'il me trouve des erreurs dans mon script alors qu'il n'y en a pas... deux preuves : (i) quand je mets en commentaire l'intégralité du script en laissant return(0); il me trouve encore des erreurs. (ii) quand je quitte isis et que je recharge la base avec exactement le même script (je l'exporte alors qu'il indique qu'il contient une erreur) alors là il ne trouve plus d'erreur et ça tourne.
n'y aurait t-il pas moyen d'avoir des messages d'eereur de syntaxe du script plus développé plus explicite pour eviter de chercher trop longtemps les erreurs?
D'autre part j'ai un problème avec Rserve et le chargement des bases isis : il semble y avoir une instabilité de conflit entre ces deux parties : parfois la base s'ouvre sans les simulations existantes, parfois les scripts s'ouvrent sans toutes les méthodes. J'ai beau relancé ici il me refait le coup...mais au bout de quelque fois ça marche ! et çà a l'air e dépendre de Rserve en background...
Pourrais tu voir si il y aurait pas une instabilité quelque part?
Merci d'avance et A+
------------------------------------------------------------------------
_______________________________________________ Isis-fish-devel mailing list Isis-fish-devel@lists.labs.libre-entreprise.org http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-devel
-- Hilaire Drouineau IFREMER, département EMH Centre de Nantes - BP 21105 - 44311 Nantes Cedex 3 tel : +33 (0)2 40 37 43 06 - fax : +33 (0)2 40 37 40 75 email : hilaire.drouineau@ifremer.fr - web : http://www.ifremer.fr *****************************************************************
participants (3)
-
Benjamin POUSSIN -
Francois.Bastardie@ifremer.fr -
Hilaire DROUINEAU