Tu peux stocker tes infos dans un fichier INI sous cette forme :
Code: Select all
id={"titre" : "", "couleur" : "", "prix" : "", "etat" : ""}
Ainsi tu pourras accéder aux propriétés de tes items via id.titre (id.couleur, id.prix, id.etat) ou id["titre"] (id["couleur"], id["prix"], id["etat"]). Cependant il te faudra stocker la correspondance titre=id quelque part.
Sinon tu peux stocker tes données comme ceci :
Code: Select all
titre={"couleur" : "", "prix" : "", "etat" : ""}
Les titres de tes items peuvent contenir des symboles (@-'). Attention cependant a filtrer le symbole # et à le supprimer sinon il fera planter le script. Tu pourras accéder aux valeurs via titre.couleur, ou plutôt Obj["titre"].couleur. Obj étant le nom de la variable récupérant l'objet.
Je n'ai pas regardé le fonctionnement de ton script, mais voilà ce que je ferais.
Première étape, on charge le contenu du fichier dans un tableau, comme ça on garde le détails de tout les items en mémoire sans avoir besoin de constamment aller chercher l'information dans le fichier INI. Si il y a 100 000 items ça fera un grand tableau mais de toute façon, un fichier INI n'est pas fait pour stocker autant d'informations donc bon.
Code: Select all
var lectureFichierIni = new IniFile().load("test.ini"), values = [], test = true, key = 0; //Chargement du fichier INI, tableau vide qui servira a stocker les items, condition de boucle, key du fichier INI
while (test === true) { //Tant que test = true, on continue
if (lectureFichierIni.keyExists(key)) { //Si il existe la key dans le fichier INI, 0 au premier passage
values[key] = JSON.parse(lectureFichierIni.keyValue(key)); //On récupère la valeur et on la parse en JSON
key++; //On incrémente la key de 1
} else //Si la key n'existe pas dans le fichier INI
test = false; //On stop la boucle
}
Ce code est pas terrible, car si une ligne est supprimé, donc qu'un id manque, la boucle s’arrête mais il y a un
bug ^^, cependant, il est possible de compter le nombre de key en manipulant le fichier INI comme un simple fichier texte, si tu as vraiment besoin.
Ensuite, on manipule ce tableau, par exemple pour chercher un item avec son titre :
Code: Select all
var search = "bébé", resultSearch = []; //Titre recherché, stockage des résultat dans un tableau
for (var i = 0; i < values.length; i++) { //On boucle sur le tableau contenant le fichier INI
if (values[i].titre == search) //Si le titre est égale à la recherche
resultSearch.push(values[i]); //On ajoute la valeur dans le tableau resultSearch
}
for (var i = 0; i < resultSearch.length; i++) { //Boucle sur le tableau resultSearch pour lire les résultats
Console.print(resultSearch[i].titre + " " + resultSearch[i].couleur + " " + resultSearch[i].etat);
}
Utilisation d'un tableau pour stocker les données dans le cas où certains items auraient un titre identique. Si les titres sont uniques, ben pas besoin de tableau, merci Cap'tain Obvious !
Pour chercher tout les items ayant un prix supérieurs à 10 euros :
Code: Select all
var search2 = 10, resultSearch2 = [];
for (var i = 0; i < values.length; i++) {
if (values[i].prix > search2)
resultSearch2.push(values[i]);
}
for (var i = 0; i < resultSearch2.length; i++) {
Console.print(resultSearch2[i].titre);
}
Ici, même principe.
EDIT : Contenu du fichier INI :
Code: Select all
0={"titre" : "herbe", "couleur" : "rouge", "prix" : "3", "etat" : "bloc"}
1={"titre" : "bébé", "couleur" : "bleue", "prix" : "300", "etat" : "cuit"}
2={"titre" : "bébé", "couleur" : "violet", "prix" : "1", "etat" : "congelé"}
3={"titre" : "nuage", "couleur" : "vert", "prix" : "45", "etat" : "emprisonné"}