34


Livre de (petites) recettes
Web / HTTP
var w = new Stream('http://www.jsdb.org/');
Ouvre un nouveau flux HTTP, envoie la requête GET en utilisant un proxy si nécessaire
writeln(w.readLine());var r = new Record;
Affiche la réponse HTTP.Déclare un objet de stockage pour l’en-tête
w.readMIME(r);
Lit l’en-tête MIME et la stocke dans r
writeln('Header\n',r.toString(),'\n');
Montre l’intégralité de l’en-tête HTTP
var data = w.readFile();
Place toute la page Web dans une chaîne
writeln('Page\n',data);
Affiche la page Web
w.close();
Ferme la connexion réseau
Email
var m = new Mail('SMTP','username',
    'password','pop-server',  'smtp-server','utf-8',
    'me@email.com');
Nouvelle interface Mail, effectue l’authentification MD5, le pilote POP3/SMTP analyse les messages de type multipart. Consultez la documentation de la classe pour plus de détails.
m.send('me@email.com','subject','Hi there!');
Envoie un nouveau message
var inbox = m.get();
Lit le courrier arrivé. Mail.get() renvoie un objet Table.
if (inbox.count) {
Si un message est disponible...
  writeln('mail from ',inbox.get(1,'Sender'));
   Emetteur ?
  writeln(inbox.getMessage(1));  writeln(inbox.getHTML(1));
  Contenu du message ; Contenu HTML pour les messages multipart.
}m.close()
Ferme les connexions aux serveurs.
Base de données
Table.create("myfile.dbf","NAME 30, SEQUENCE 10");
Crée un nouveau fichier xBase avec deux colonnes
var myTable = new Table("myfile.dbf");
Ouvre le fichier en lecture-écriture
for each(var n in ["Alice","Bob","Cynthia"])
  myTable.add(new Record("NAME=" + n));
Ajoute quelques enregistrements
for (var i = 1; i <= myTable.count; i++) {
  writeln(i, ": ", myTable.get(i, 'NAME'));
La numérotation des enregistrements d’un objet Table commence à 1.
Table.get(rang,colonne) renvoie le contenu de la colonne de l’enregistrement de rang spécifié. La colonne est désignée par son nom ou son indice (à partir de 1).
  myTable.set(i,'SEQUENCE',i-1);
Table.set(rang,colonne,valeur) modifie immédiatement le fichier de données en affectant le valeur indiquée à la colonne de l’enregistrement de rang spécifié.
}

Lit une table SQL construit un index et recherche une valeur
var db = new ODBC("DSN=driver;UID=login;PWD=password;");
var result = db.query("select * from mytable");
result est un objet Table contenant le résultat (de la requête).
var searcher = new Index;
Index est une classe générique dédiée aux recherches au sein de chaînes binaires.
for (var i=1; i <= result.count; i++)
  searcher.add(result.get('NAME'));
Ajoute les données à l’index.
var i = searcher.find('Mr. Smith');var r = result.getRow(i + 1);
Cherche un enregistrement spécifique.
Les valeurs d’indice commencent à 0 d’où l’ajout de 1 [ndlr : pour mémoire la numérotation des enregistrements d’un objet Table débute à 1]. Table.getRow(rang) retourne un objet Record [ndlr : contenant les données de l’enregistrement de rang spécifié].
writeln('Data for Mr. Smith');writeln(r.toString());
Affiche le résultat à l’écran.
db.close().
Libère les ressources ODBC. La fermeture de db libère également result.

Même chose en beaucoup plus rapide ...
var result = new Table("odbc://login:password@driver/mytable");
Ouvre une connexion ODBC et récupère le contenu de la table. Les connexions ODBC sont mises en cache et réutilisée.
var searcher = result.index('NAME');
Table.index(colonne) retourne un objet Index dont le premier indice est 1.
var r = result.getRow(searcher.find('Mr. Smith'));
Table.getRow(rang) retourne un objet Record.
writeln('Data for Mr. Smith');
writeln(r.toString());
Affiche le résultat à l’écran.
resut.close();
Ferme la connexion (et libère les ressources ODBC).
Texte
var source = new Stream("myfile.txt");
Ouvre un fichier texte en lecture seule
var count = new Object;
count sauvegarde les résultats [ndlr : var count={}]
while (!source.eof) {
Répète jusqu’à ce que la fin du fichier soit atteinte
  var line = source.readLine('\n');
Lit une ligne de texte à partir du fichier (en utilisant le retour-chariot comme séparateur)
  words = line.split(/\W/g);
Découpe le ligne en un tableau de mots (g pour global)
  for (var i in words)  {
Pour chaque mot de la ligne...
    if (words[i] == '') continue;
Ignore les mots vides [ndlr : sans caractère]
    if (count[words[i]])
Est-ce un mot déjà rencontré ?     
      count[words[i]]++;
Oui : Incrémente le compteur
    else
      count[words[i]] = 1;
Non : Crée un nouveau compteur (initialisé à 1)
  }
}
Fin de la lecture du fichier de données
for (var i in count)
Pour chaque mot stocké dans l’objet count
  writeln(i,': ',count[i]);
Ecrit le mot et son nombre d’occurrences