Ajout possibilité de tout stopper à la moindre erreur rencontrée par le parseur + suppression des noms de colonne vide pouvant être reçus.

This commit is contained in:
Fabrice PENHOËT 2021-08-12 18:38:09 +02:00
parent 78d5279eed
commit 4d4360e709
4 changed files with 56 additions and 4 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "freecsv2html", "name": "freecsv2html",
"version": "0.2.0", "version": "0.3.1",
"description": "Conversion of a csv file into an HTML code with selection lists, data sorting, etc.", "description": "Conversion of a csv file into an HTML code with selection lists, data sorting, etc.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -25,6 +25,7 @@ export class freeCSV2HTML
public parseDatas: papaParseDatas[] = []; public parseDatas: papaParseDatas[] = [];
public parseErrors: papaParseErrors[] = []; public parseErrors: papaParseErrors[] = [];
public datasHTML: string = ""; public datasHTML: string = "";
public stopIfParseErrors : boolean = false;
set datasViewElt(elt: domElement) set datasViewElt(elt: domElement)
{ {
@ -83,9 +84,17 @@ export class freeCSV2HTML
header: true, header: true,
complete: function(results :any) complete: function(results :any)
{ {
converter.parseMeta=results.meta;
converter.parseErrors=results.errors; converter.parseErrors=results.errors;
converter.parseDatas=results.data; converter.parseDatas=results.data;
// Attention, papaParse peut accepter un nom de colonne vide
let realFields: string[]=[];
for(let i in results.meta.fields)
{
if(results.meta.fields[i].trim() !== "")
realFields.push(results.meta.fields[i]);
}
results.meta.fields=realFields;
converter.parseMeta=results.meta;
resolve(true); resolve(true);
}, },
error:function(error :any) error:function(error :any)
@ -110,13 +119,15 @@ export class freeCSV2HTML
await this.parse(); await this.parse();
if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) // je force avec "!", car l'existence de parseMeta certaine après parse().
throw new Error(errors.datasNotFound); throw new Error(errors.datasNotFound);
else if(this.stopIfParseErrors && this.parseErrors.length!==0)
console.error(this.parseErrors);
else else
{ {
let converter=this; let converter=this;
// Affichage initial des données du fichier // Affichage initial des données du fichier
this.datasHTML=this.createDatasHTML(this.parseMeta!.fields, this.parseDatas); // je force avec "!", car l'existence de parseMeta certaine après parse(). this.datasHTML=this.createDatasHTML(this.parseMeta!.fields, this.parseDatas);
this._datasViewElt.eltDOM.innerHTML=this.datasHTML; this._datasViewElt.eltDOM.innerHTML=this.datasHTML;
// Si demandé, création des listes permettant de filter les données // Si demandé, création des listes permettant de filter les données

View File

@ -0,0 +1,14 @@
Z (numéro atomique),Élément,Symbole,Famille,Abondance,,
1,Hydrogène,H,Non-métal,1400000,dze,
2,Hélium,He,Gaz noble,8,,
3,Lithium,Li,Métal alcalin,20000,,
4,Béryllium,Be,Métal alcalino-terreux,2800,,
5,Bore,B,Métalloïde,10000,dd,dd
6,Carbone,C,Non-métal,200000,,
7,Azote,N,Non-métal,19000,,
8,Oxygène,O,Non-métal,461000000,,
9,Fluor,F,Halogène,585000,,
10,Néon,Ne,Gaz noble,5,,
11,Sodium,Na,Métal alcalin,23600000,,
12,Magnésium,Mg,Métal alcalino-terreux,23300000,,
13,Aluminium,Al,Métal pauvre,82300000,,
1 Z (numéro atomique) Élément Symbole Famille Abondance
2 1 Hydrogène H Non-métal 1400000 dze
3 2 Hélium He Gaz noble 8
4 3 Lithium Li Métal alcalin 20000
5 4 Béryllium Be Métal alcalino-terreux 2800
6 5 Bore B Métalloïde 10000 dd dd
7 6 Carbone C Non-métal 200000
8 7 Azote N Non-métal 19000
9 8 Oxygène O Non-métal 461000000
10 9 Fluor F Halogène 585000
11 10 Néon Ne Gaz noble 5
12 11 Sodium Na Métal alcalin 23600000
13 12 Magnésium Mg Métal alcalino-terreux 23300000
14 13 Aluminium Al Métal pauvre 82300000

View File

@ -80,6 +80,14 @@ describe("freeCSV2HTML", () =>
expect(converter.parseErrors.length).toBeGreaterThan(0); expect(converter.parseErrors.length).toBeGreaterThan(0);
}); });
it("Ne doit garder que les noms de colonne non vides.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors2.csv";
await converter.parse();
expect(converter.parseMeta.fields.length).toEqual(5);
});
it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () => it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
@ -110,6 +118,25 @@ describe("freeCSV2HTML", () =>
let txtDatasViewsElt=document.getElementById("datas").innerHTML; let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(""); expect(txtDatasViewsElt).toEqual("");
}); });
it("Si la moindre erreur est rencontrée durant la parsage et que cela est demandé, ne rien afficher dans l'emplacement prévu pour les données.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
converter.stopIfParseErrors=true;
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual("");
});
it("Sauf si cela est demandé, même si des erreurs sont rencontrées durant la parsage, les données trouvées dans le fichier seront affichées.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).not.toEqual("");
});
it("Doit afficher un tableau correspondant aux données du fichier csv", async () => it("Doit afficher un tableau correspondant aux données du fichier csv", async () =>
{ {