| Inverness |
08-19-2007 08:59 PM |
TIniFile
Oi, heres a little thing I whipped together before the loadini() thing was added, but I don't think that even has all the features as this.
This the script for my TIniFile which I use for things like my NPC Dialog system. Also for saving and loading mud objects.
Added comments to the script.
PHP Code:
// Loads an INI File into the object. public function load(filename) { // Declaring the temp variables temp.file = 0; temp.i = 0; temp.key = 0; temp.e = 0; temp.var = 0; temp.val = 0; // Load all the lines from the file. file.loadlines(filename); // Stop the loading if the file has no lines. if (file.size() < 1) { return; } for (i = 0; i < file.size(); i ++) { // If the line starts with a semi-colon, skip it. (For comments) if (file[i].starts(";")) continue; // Checking if the line is an INI section header (key) if (!file[i].starts("[") && !file[i].ends("]")) { // Check to see if a section has been found, can't load variables without one. if (key == null) continue; // Get the position of the equal sign on the line. e = file[i].pos("="); // Skip the line if it doesn't exist if (e < 0) continue; // If the line starts with an equal sign, append to last variable loaded. // This is good for long multi-line amounts of text. if (e == 0 && var != null) { val = file[i].substring(1, -1); this.(@ key).(@ var) @= val; } // If the equal sign isn't at the beginning, set a variable in the right section // <varname>=<value> else { var = file[i].substring(0, e); val = file[i].substring(e+1, -1); this.(@ key).(@ var) = val; } } else { // Set the INI section. key = file[i].substring(1, file[i].length() - 2); } } } // Saves this object as an INI file public function save(filename) { // Declaring temp variables, and getting dynamic variables in the object temp.output = 0; temp.i = 0; temp.e = 0; temp.keys = this.getdynamicvarnames(); temp.vars = 0; for (i = 0; i < keys.size(); i ++) { // If the dynamic variable is actually a value, skip it if (this.(@ keys[i]).type() != -1) continue; // Write the section header output.add("[" @ keys[i] @ "]"); // Get the dynamic variables for the section vars = this.(@ keys[i]).getdynamicvarnames(); for (e = 0; e < vars.size(); e ++) { // Add a line for the variable if its not zero. if (this.(@ keys[i]).(@ vars[e]) != null) { output.add(vars[e] @ "=" @ this.(@ keys[i]).(@ vars[e])); } } } // write the lines output.savelines(filename, 0); } // Clears all values for a certain INI section. public function clearkey(keyname) { temp.i = 0; temp.vars = 0; // Stop the function if its an actual object. if (this.(@ keyname).type() != -1) return; vars = this.(@ keyname).getdynamicvarnames(); for (i = 0; i < vars.size(); i ++) { this.(@ keyname).(@ vars[i]) = null; } } // Copies variables from an INI section to an object (like object.loadvars()) public function copyvars(keyname, object) { // Stop the function if 'object' isn't an actual object. if (object.type() != 2) return; // Stop the function if this.keyname is an object. if (this.(@ keyname).type() != -1) return; for (temp.i: this.(@ keyname).getdynamicvarnames()) { object.(@ i) = this.(@ keyname).(@ i); } }
I like INI files because the text editor in RC color-codes them for you ^^
Heres files that it works with:
PHP Code:
// A TMudObject [items] i0=gold,600,"0,",0,0 i1=sword,1,"0,",0,0 i2=longsword,1,"0,","name_pre,","Rusted," [object] health=50 id=Inverness mana=100 maxhealth=50 maxmana=100 type=player version=3 weight=14400 [spells] s0=flare s1=fireball
PHP Code:
// Feature example [section1] var1=value var2=Multi = Line = Text. = Do not forget your spaces =P [section2] var3=value ;This is a comment var4=3.14
If you haven't caught on yet, stuff can be read with inifileobject.sectionname.variable
|