Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Annuaire en xul

Envoyé par : Piou2fois

Date : 10/03/2006 15:03

Bonjour Je progresse doucement mais surement dans mon annuaire en xul, simplifié :) Jusqu'à maintenant je récupère un fichier genre cvs, séparé par des ";" et j'insère le tout dans un tree, avec détection des noms des colonnes... en voici le code :

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window title="Test de lecture d'un fichier"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<script><![CDATA[
function rempli() {
 var uri = "chemin du fichier"; // ajouter la fonction pour récupérer un fichier
 var txt = read(uri);
 //Un peu de cosmétique, affichage du chemin du fichier en bas de la fenêtre
 document.getElementById('nom_fichier').value = "Fichier : " + uri;
}
function selection(nb) {
var tree = document.getElementById('arbre');
tree.view.selection.select(nb);
}
function read(filepath) {
try  {
//On autorise le navigateur a ouvrir des fichiers locaux
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission de lire les fichiers refusée");
}
//On ouvre le fichier
var file =  Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); 
file.initWithPath(filepath);
if ( file.exists() == false ) {
alert("Le fichier n'éxiste pas");
}
// Ouverture d'un "input stream" sur le fichier
var istream =Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
istream.init(file, 0x01, 0444, 0);
istream.QueryInterface(Components.interfaces.nsILineInputStream);
// lecture des lignes du fichier
var line = {}, hasmore;
hasmore = istream.readLine(line);
var texte=line.value
var tableau=texte.split('\;');
nb_colonne=tableau.length-1;
var tree = document.getElementById('arbre'); 
var  cols   = document.createElement('treecols');
for(i=0;i<nb_colonne;i++){
var  col = document.createElement('treecol');
if (tableau[i] == undefined)
{ 
tableau[i] = '';
}
col.setAttribute('label', tableau[i]);
col.setAttribute('flex',1);
cols.appendChild(col);
splitter=document.createElement('splitter');
cols.appendChild(splitter);
}
tree.appendChild(cols);
var children = document.createElement('treechildren'); // assigne un élément treechildren à la variable children
do {
hasmore = istream.readLine(line);
var texte=line.value
var tableau=texte.split('\;');
var item = document.createElement('treeitem');
var row = document.createElement('treerow');
for(i=0;i<nb_colonne;i++){
var  cells = document.createElement('treecell');
if (tableau[i] == undefined)
{
tableau[i] = '';
}
cells.setAttribute('label', tableau[i]);
row.appendChild(cells);
}
item.appendChild(row);
children.appendChild(item);
} while(hasmore);
tree.appendChild(children);
istream.close();
}
]]></script>
<hbox>
<textbox onkeyup="selection(this.value);" id="search" />
<button label="Go" oncommand="rempli();" width="100px"/>
</hbox>
<hbox style = "overflow: auto;" flex="1">
<tree style="font-size:0.8em" id="arbre" flex="1">
</tree>
</hbox>
<label value="..." id="nom_fichier"/>
</window>

Vous remarquerez que j'ai pris des bouts de code un peu partout sur le net avant de l'adapter pour mes besoins.

Permière question : qu'en pensez vous pour le moment ?

Seconde question : j'aimerai en fait proposer de récupérer les infos d'un fichier cvs (tabulé, ou séparé par ";" etc.) et le mettre sous la forme d'un fichier RDF. Comment m'y prendre ?

Les prochaines étapes :

  • séparer les scripts, les style du fichier xul
  • proposer de choisir un fichier sur le disque
  • proposer une analyse globale du fichier (du genre les imports d'excel ou autre) avec des propositions de colonnes, choix d'import ou non...
  • mettre en place un tri en fonction de ce qui est tapé dans la zone de texte (id search).

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.