Hat jemand einen guten JSL .ini-Dateileser?ich stelle mir vor
[Thing1]
x = 14
y = String
z = ...
[Thing2]
x=DifferentString
y=28
Werden
[
"Thing1"=>
["x"=>14, //not sure if this should be a number or string
"y"=>"String",
"z"=>"..."],
"Thing2"=>
["x"=>"DifferentString",
"y"=>28]
]
SkriptingRe: Hat jemand einen guten JSL .ini-Dateileser?Ich glaube, ich habe so etwas gemacht, als ich dieselbe Konfigurationsdatei in Python und JMP verwenden wollte, aber aufgegeben habe, weißt nicht mehr warum. Aber ich musste die Minitab-MAC-Dateien analysieren, und die gleiche Idee könnte hier funktionieren.
Unten ist ein modifiziertes Skript, um diese Art von Zeichenfolgen zu passen. Möglicherweise müssen Sie Trim Whitespace hinzufügen:
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: Hat jemand einen guten JSL .ini-Dateileser?nett! Es braucht Trim für Schlüssel und Wert.
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 ) );
Verschieben Sie diese .ini-Dateien in das aktuelle Jahrhundert!
{"Thing1":{"x":14,"y":"String","z":"..."},"Thing2":{"x":"DifferentString with space","y": 28}}
Manchmal ist es schwer zu sagen, ob JSON ein Schritt vorwärts oder rückwärts ist.
Re: Hat jemand einen guten JSL .ini-Dateileser?In einfachen Fällen bevorzuge ich ini/config-Dateien gegenüber JSON, weil sie normalerweise einfacher direkt aus der Datei zu lesen und zu bearbeiten sind (sei es gut oder schlecht) und als ich mit LabVIEW arbeitete, wurde das Format vertraut Konfigurationsdateien VI .
Überlege derzeit, wie ich in einigen meiner Skripte mit ziemlich einfachen Konfigurationsdateien umgehen würde. Ich muss nur mit .jsl- oder json/.ini-Dateien herumspielen.
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"]
Betreff: Hat jemand einen guten JSL .ini-Dateileser?Stimmen Sie zu 100 % zu, dass XML und JSON und gedumpte assoziative Arrays nicht im Editor bearbeitet werden sollen. Und es ist nicht immer sinnvoll, einen eigenen Editor zu schreiben, also haben .INI-Dateien immer noch ihren Platz.