Problème de lecture du fichier .ini

Si vous avez trouvé un bug ou ce que vous pensez être un bug n'hésitez pas à le signaler. Cela permettra sa correction.
Post Reply
Sergent-Quentin
Posts: 273
Joined: 11 Jun 2014, 14:45

Problème de lecture du fichier .ini

Post by Sergent-Quentin » 05 Aug 2015, 20:35

Bonjour,

J'ai trouver un bug, lorsqu'on écrit dans un fichier ini avec une valeur qui tiens sur une ligne comme ceci :

Section : Carton
Rubrique : Nombre
Valeur : 54

et qu'on lit avec lecture ini cette valeur, il n'y a aucun problème.

Mais lorsque qu'on écrit une valeur sur plusieurs lignes :

Section : Carton
Rubrique : Nombre
Valeur : Ligne1
Ligne2

Et qu'ont lit cette valeur, il y a une erreur indiquant qu'il ne peut pas lire le fichier :(

Cela fonctionnait dans l'ancienne version car je stockais des descriptions ^^

Voilà tout, si une solution temporaire peut-être trouvé je suis preneur car j'en ai vraiment besoin svp ^^

Merci

Cordialement

Sergent-Quentin

francois
Posts: 295
Joined: 18 Oct 2010, 10:33
Location: France

Re: Problème de lecture du fichier .ini

Post by francois » 09 Aug 2015, 21:25

Bonjour,


Préoccupation :
-> Modifier le moins possible les scripts existants. Et donc conserver la lecture d'un fichier INI.

Démarche
Action 1 : Création d'un fichier INI 'Normalisé : 1 variable => 1 ligne.
Action 2 : Lire le fichier INI normalisé
Action 3 : Par variable, récupérer les retours à la ligne

Action 1 : creation d'un fichier normalisé
Paramètrer en début de script le nom des fichiers INI

Code: Select all

//=====
// A personnaliser
//=====
repp_fichier = "C://temp"
nom_fichier_in = "test_1.ini"
nom_fichier_out = "test_2.ini"
//=====



//=====
// servira après que le fichier INI ait été normalisé ( 1 variable = 1 ligne)
// Et lu via Actiona en tant que fichier INI :

//      Pour remettre sur N lignes la dite variable.
//=====
dlm= "#=#"  // dlm de  fin de ligne ( cas des variables multi lignes) 




//=====
//==> fichier INI avec "Variables multi lignes"
//=====
fich_in_chemin_complet= repp_fichier + "/" + nom_fichier_in
var fich_in = new File();
fich_in.open(fich_in_chemin_complet,File.ReadOnly| File.Text);

au_km= fich_in.readText();
fin_ligne =String.fromCharCode(10);
t_lignes =au_km.split(fin_ligne);
//=====




//=====
//==> Fichier INI  "1 variable ---1 ligne"
//=====
fich_out_chemin_complet = repp_fichier  + "\\" + nom_fichier_out;
var fich_out = new File();
fich_out.open(fich_out_chemin_complet,File.WriteOnly | File.Text);
//=====



//=====
//==> Remplissage fichier INI corrigé
//=====
w_zone=""
for(i=0;i<t_lignes.length;i=i+1)
{
section_a_traiter =false
variable_ligne_premiere =false

//=====
// on ne retient pas les lignes à blanc 
//=====
if (t_lignes[i] =="") {continue;} 
//=====

//=====
// on repère les lignes "classiques" 
//=====
if  ( t_lignes[i].indexOf("[") > -1 ) {section_a_traiter = true}
if  ( t_lignes[i].indexOf("=") > -1) {variable_ligne_premiere =true}
//=====



//=====
// Si ligne actuelle avec structure classique
//      On ecrit la variable précédente 

//   ( on ne sait le nombre de lignes d'une variable qu'à l'apparition de la variable suivante)

// De la sorte, on prend  en compte
//   1)  variable precedente sur une ligne
//   2) variable précédente sur N lignes

//    Il faut simplement enlever le dernier 'dlm' qui ne sert à rien
//    Lorsque la variable tient sur N lignes, les dlm intermédiaires sont donc  conservés

//=====
if (i > 0 &&   (section_a_traiter == true || variable_ligne_premiere ==true))
{
// w_zone de la variable précédente est à ecrire, virer 'dlm' de fin 
    w_zone = w_zone.substr(0,w_zone.length  - dlm.length) +  " \n";
    fich_out.writeText(w_zone);

    w_zone  = ""
}
//=====
// dans tous les cas ( pour la variable actuelle)
w_zone  = w_zone +  t_lignes[i] + dlm
};	
//======

// Dans boucle, on ecrivait la variable précédente, 
//  en sortie de boucle il faut donc ecrire la derniere variable
 w_zone = w_zone.substr(0,w_zone.length  -dlm.length)
 fich_out.writeText(w_zone);
    

fich_in.close();
fich_out.close();	 


Action 2 : Lire le fichier INI Normalisé (en tant que fichier INI)

Code: Select all

var fichier_ini= new IniFile()

 fichier_ini.load(fich_out_chemin_complet);
 fichier_ini.setSection("Carton");
Description= fichier_ini.keyValue("Description");
Console.print(Description)
Action 3 : Changer 'DLM' en "retour à la ligne"

Code: Select all


Description = Description.replace(/#=#/g,String.fromCharCode(10))
Console.print(Description)
Francois

Sergent-Quentin
Posts: 273
Joined: 11 Jun 2014, 14:45

Re: Problème de lecture du fichier .ini

Post by Sergent-Quentin » 10 Aug 2015, 15:22

Bon travail ^^

Je l'ai tester et ça résout le problème :) en attendant un correctif

Merci beaucoup :)

Cordialement

Sergent-Quentin

User avatar
Jmgr
Admin
Posts: 1635
Joined: 07 Dec 2005, 15:45
Contact:

Re: Problème de lecture du fichier .ini

Post by Jmgr » 17 Aug 2015, 13:34

J'ai du changer d'outil pour la lecture et l'écriture des fichiers INI (l'autre n'était plus maintenu par ses auteurs) et le nouvel outil n'a pas exactement le même comportement. Il semble être plus strict dans son interprétation du format INI (qui n'est pas normé, donc chacun a sa propre interprétation). Ce comportement ne peut pas être modifié donc je n'ai pas de solution à proposer, malheureusement.
"My software never has bugs. It just develops random features."

Post Reply