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 :
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.