Hat jemand einen guten JSL .ini-Dateireader?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]
]
Automatisierung und SkriptingBetreff: Hat jemand einen guten JSL .ini-Dateileser?Coolio.Ja. Ich versuche wirklich nur, genau das Gleiche zu tun, indem ich meine Konfigurationen für mehrere Sprachen/Frameworks konsolidiere.
Man verwendet XML, ein YML, ein TOML, und dann habe ich Python und JSL.Ich persönlich mag die YML für Lesbarkeit und Kommentierung.
Nachdem ich das gefragt hatte, wurde mir klar, dass ich INI nicht wirklich verwenden kann, weil ich Verschachtelungen brauche (obwohl ich nur eine Namenskonvention haben und mich damit befassen könnte).
Das ist immer noch super nützlich.Danke an alle.
Betreff: Hat jemand einen guten JSL .ini-Dateileser?Ich lese und schreibe routinemäßig assoziative Arrays in eine Oracle-Datenbank.Dies ist ein ähnlicher Ansatz für eine INI-Datei:
/*
Function Name: char_to_aa
Description: Convert a character string to an associative array
*/
char_to_aa = Function({one_char_aa},
if (contains(one_char_aa, "Associative Array"),
one_aa = eval(parse(one_char_aa));
,
one_aa = parse(one_char_aa);
);
one_aa;
);
//---------------------------------------------------------------------
// Now try this out
aa = associative array();
aa["Thing1"] = {14, "String", "z-value"};
aa["Thing2"] = {"DifferentString", 28, "other-z-value"};
// Convert the associative array to a char
char_aa = char(aa);
// Save it to a file
save text file("$temp\myfile.ini", char_aa);
write(char_aa);
// Convert it back to an associative array
new_char_aa = load text file("$temp\myfile.ini");
new_aa = char_to_aa(new_char_aa);
print(new_aa);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.
Betreff: Hat jemand einen guten JSL .ini-Dateileser?Ich bevorzuge in einfachen Fällen ini/config-Dateien gegenüber JSON, weil sie normalerweise einfacher direkt aus der Datei zu lesen und zu bearbeiten sind (sei es nun gut oder schlecht) und als ich mit LabVIEW gearbeitet habe, wurde mir das Format vertraut Konfigurationsdateien VI .
Ich denke derzeit darüber nach, wie ich in einigen meiner Skripts mit ziemlich einfachen Konfigurationsdateien umgehen würde. Ich muss herumspielen, indem ich nur .jsl- oder json/.ini-Dateien verwende.
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?Hübsch! Es braucht Trimmung 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.
Betreff: Hat jemand einen guten JSL .ini-Dateileser?Ich glaube, ich habe so etwas getan, als ich dieselbe Konfigurationsdatei in Python und JMP verwenden wollte, aber aufgegeben habe, weiß nicht mehr warum. Aber ich musste einige Analysen für Minitab-MAC-Dateien durchführen, und die gleiche Idee könnte hier funktionieren.
Unten ist ein modifiziertes Skript, um diese Art von Zeichenfolgen anzupassen. Erfordert möglicherweise das Hinzufügen von 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]];