LN2Histo
,
comme le détenteur d'une information qu'il acquiert lors de sa création,LN2Histo
va
pouvoir être normalement constituée, avec un attribut privé (variable
d'instance),tabHisto
i
entre 0 et 20, tabHisto[i]
est le nombre de notes valant i
.Document
XML contenant noms & notes, tabHisto
;Document
.makeXML()
construit le Document
correspondant
au contenu de tabHisto
, en deux
boucles sans mystère.tabHisto
.LN2Histo
se
fait alors de façon canonique,Document
Noms-Notes, passé en paramètre au constructeur - appelons-le doc
,Document
XML désiré, représentant l'histogramme- appelons-le res
.
LN2Histo mkh = new LN2Histo(doc); //
création de l'instance
Document res = mkh.makeXML(); // exploitation
La façon dont on s'est procuré le Document doc
(à partir d'un fichier, ou d'une transformation quelconque), Document
res
(envoyé dans un fichier ou bien utilisé directement), ne nous
concernent
pas ici.java.lang.Math
, porteuse d'une batterie de fonctions mathématiques,Integer.parseInt
et String.valueOf
.NNTxt2Xml
Document
Noms-Notes (en
format 1 au sens de l'exemple simple du cours 3)public static Document lireText(BufferedReader entree)
.Document doc
= NNTxt2Xml.lireText(entree);
BufferedReader entree
,
de même que l'usage qui sera fait de Document doc
ne
nous concernent pas ici.@tab =
<FICHIER>;
ou PHP : $tab =
file($nomFich);
) readLine()
.java.io.BufferedReader
,
si bien que l'opération se divise en trois phases :BufferedReader
à
partir du nom du fichier : String nomFich
),
on passe par une étape java.io.FileReader
:BufferedReader entree = new BufferedReader(new
FileReader(nomFich));
readLine()
renvoie null,
d'où l'emploi usuel d'une boucle do... while
.String ligne = entree.readLine();
do {
/* traiter la ligne
*/
ligne = entree.readLine();
} while ( ligne != null );
lireText
de la
classe NNTxt2Xml.
split(exp. reg.)
,
où l'expression
régulière peut être donnée comme une chaîne de caractèresString[] lex = ligne.split("[ \t]+");
// Attention à ne pas oublier la tabulation !
String nom = lex[0];
String note = lex[1].trim();
DeuxVersUn.java
vu précédemment.listeNotes
contient
l'objet Document
qui sera le résultat final
de la construction.Element el = listeNotes.createElement("eleve");
liste.appendChild(el);
el.setAttribute("nom", nom);
el.setAttribute("note", note);
Document
sur fichier :Document
construitXML::DOM
en
Perl où on trouve une opération createXMLDecl(version,
charset)
]javax.xml.transform.stream.StreamResult
(cf. Bréviaire),
java.io.Writer
,
on choisit donc pour le réaliser la classe java.io.OutputStreamWriter
.Writer
sortie = new OutputStreamWriter(System.out, "UTF-8");
nomFich
: Writer sortie = new
OutputStreamWriter (new FileOutputStream (nomFich), "UTF-8");
Document doc
s'écrit :DOMSource src = new DOMSource(doc);N.B. Si on veut un flot de sortie dans lequel on souhaite programmer soi-même les écritures, il est utile de choisir un
StreamResult res = new StreamResult(sortie);
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.transform(src, res);
PrintWriter
OutputStreamWriter
, pour pouvoir utiliser les méthodes habituelles print
et println
.PrintWriter ma_sortie = new PrintWriter(sortie, true);
" true
" ayant pour effet que println
vide le buffer (en anglais flush), c'est-à-dire provoque une impression immédiate DocumentBuilder
)
tient automatiquement compte du codage annoncé dans l'en-tête XMLencoding.
NNTxt2Xml
, qu'il faut se préoccuper du
codage-source.java.io.InputStreamReader
qui
est compétente : ses constructeurs prennent un second argument qui
spécifie le charset.nomFich
, on
construira ainsi le BufferedReader
nécessaire
à la lecture ligne à ligne :BufferedReader entree =
new BufferedReader (
new InputStreamReader(new FileInputStream (nomFich), "UTF-8") );
NNTxt2Xml.java
et LN2Histo,java
NomsNotes.txt
(en UTF-8)LN2Histo
et logé dans
le fichier histo.xml
.