Quelqu'un a-t-il un bon lecteur de fichiers JSL .ini ?j'imagine
[Thing1]
x = 14
y = String
z = ...
[Thing2]
x=DifferentString
y=28
devenir
[
"Thing1"=>
["x"=>14, //not sure if this should be a number or string
"y"=>"String",
"z"=>"..."],
"Thing2"=>
["x"=>"DifferentString",
"y"=>28]
]
ScriptRe : Quelqu'un a-t-il un bon lecteur de fichiers JSL .ini ?Je pense que j'ai fait quelque chose comme ça quand je voulais utiliser le même fichier de configuration en python et JMP, mais j'ai abandonné, je ne me souviens pas pourquoi. Mais j'ai dû analyser les fichiers MAC de Minitab et la même idée pourrait fonctionner ici.
Vous trouverez ci-dessous un script modifié pour s'adapter à ce type de chaînes. Peut nécessiter l'ajout de Trim Whitespace :
Names Default To Here(1);
config_file = "[Thing1]
x = 14
y = String
z = ...
[Thing2]
x=DifferentString
y=28
";
aa_ini = Associative Array();
cur_key = "";
For Each({line}, Words(config_file, "\!N"),
If(Ends With(line, "]") & Starts With(line, "["),
new_key = Word(1, line, "[]");
aa_ini[Word(1, line, "[]")] = Associative Array();
cur_key = new_key;
,
{key, value} = Words(line, "=");
//string conversion.. expect everything to be numbers and then try to convert
new_value = If(IsMissing(num(value)),
value,
num(value)
);
aa_ini[cur_key][key] = new_value;
);
);
show(aa_ini);<BR /><BR />aa_ini = ["Thing1" => ["x " => 14, "y " => " String", "z " => " ..."], "Thing2" => ["x" => "DifferentString", "y" => 28]];Re : Quelqu'un a-t-il un bon lecteur de fichiers JSL .ini ?joli! Il a besoin d'être coupé pour la clé et la valeur.
config_file =
"[Thing1]
x = 14
y = String
z = ...
[Thing2]
x=DifferentString with space
y=28
";
aa_ini = Associative Array();
cur_key = "";
For Each( {line}, Words( config_file, "\!N" ),
If( Ends With( line, "]" ) & Starts With( line, "[" ),
new_key = Word( 1, line, "[]" );
aa_ini[Word( 1, line, "[]" )] = Associative Array();
cur_key = new_key;
,
{key, value} = Words( line, "=" );
//string conversion.. expect everything to be numbers and then try to convert
new_value = If( Is Missing( Num( value ) ),
Trim( value ),
Num( value )
);
aa_ini[cur_key][Trim( key )] = new_value;
)
);
Write( As JSON Expr( aa_ini ) );
Déplacez ces fichiers .ini dans le siècle actuel !
{"Thing1":{"x":14,"y":"String","z":"..."},"Thing2":{"x":"DifferentString with space","y": 28}}
Parfois, il est difficile de dire si JSON est un pas en avant ou en arrière.
Re : Quelqu'un a-t-il un bon lecteur de fichiers JSL .ini ?Je préfère les fichiers ini/config à JSON dans les cas simples car ils sont généralement plus faciles à lire et à éditer directement à partir du fichier (que ce soit une bonne ou une mauvaise chose) et quand j'ai travaillé avec LabVIEW, le format s'est familiarisé fichiers de configuration VI .
Je réfléchis actuellement à la manière dont je traiterais des fichiers de configuration assez simples dans quelques-uns de mes scripts. Je devrai jouer avec simplement en utilisant des fichiers .jsl ou json/.ini.
Names Default To Here(1);
read_ini_file = function({ini_str}, {Default Local},
aa_ini = Associative Array();
cur_key = "";
For Each({line}, Words(ini_str, "\!N"),
If(Ends With(line, "]") & Starts With(line, "["),
new_key = Word(1, line, "[]");
aa_ini[Word(1, line, "[]")] = Associative Array();
cur_key = new_key;
,
{key, value} = Words(line, "=");
//string conversion.. expect everything to be numbers and then try to convert
new_value = If(Is Missing(Num(value)),
Trim(value),
Num(value)
);
aa_ini[cur_key][Trim(key)] = new_value;
)
);
return(aa_ini);
);
aa_to_ini = function({aa_section}, {Default Local},
ini_str = "";
section = "\!N[^key_section^]\!N";
key_value = "^key^=^value^\!N";
For Each({{key_section, value_section}}, aa_section,
ini_str ||= Eval Insert(section);
For Each({{key, value}}, value_section,
ini_str ||= Eval Insert(key_value);
);
);
return(Trim Whitespace(ini_str,left));
);
config_file = "[Thing1]
x=14
y=String
z=...
[Thing2]
x=DifferentString with space
y=28
";
aa_test = read_ini_file(config_file);
back_to_ini = aa_to_ini(aa_test);
show(aa_test,back_to_ini,config_file);
//back_to_ini == config_file;
//aa_test == read_ini_file(back_to_ini)
//Save Text File("$TEMP/DeleteMe.txt", back_to_ini);
//Open("$TEMP");
//config_file = Load Text File("$TEMP/DeleteMe.txt");
//aa_test == read_ini_file(back_to_ini);
//aa_test["Thing1"]["x"]
Re : Quelqu'un a-t-il un bon lecteur de fichiers JSL .ini ?100 % conviennent que XML et JSON et les tableaux associatifs vidés ne sont pas destinés à être modifiés dans le bloc-notes. Et cela n'a pas toujours de sens d'écrire votre propre éditeur, donc les fichiers .INI ont toujours leur place.