Read Note Card Configuration: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 16: | Line 16: | ||
* Detect that you have reached the end of the file | * Detect that you have reached the end of the file | ||
[[Image:Dedric_Mauriac_-_Configuration_Reading_Tutorial.jpg]] | [[Image:Dedric_Mauriac_-_Configuration_Reading_Tutorial.jpg]] | ||
# '''[http://blip.tv/file/get/DedricMauriac-ConfigurationReadingTutorial661.wmv DOWNLOAD]''' [[Image:Getvidtut.png]] [http://dedricmauriac.wordpress.com/2008/05/03/configuration-reading-tutorial/ How to read configuration information from a notecard] | # '''[http://blip.tv/file/get/DedricMauriac-ConfigurationReadingTutorial661.wmv DOWNLOAD]''' [[Image:Getvidtut.png]] [http://dedricmauriac.wordpress.com/2008/05/03/configuration-reading-tutorial/ How to read configuration information from a notecard] | ||
<code> | |||
# this is a file to configure your application | |||
# blank lines are ignored as well as lines | |||
# proceeded with a "#" sign. | |||
nAmE=Dedric Mauriac | |||
Favorite Color = Aweseome Blue | |||
# This completes this tutorial. | |||
# Come on down for many scripted products at | |||
# Dedric Mauriac's Gadget Shop | |||
# Woodbridge87, 82, 27 | |||
</code> | |||
<lsl> | <lsl> | ||
Revision as of 14:36, 3 May 2008
Learn how to read configuration files with Linden Scripting Language (LSL) in Second Life (SL). After viewing this tutorial, you will be able to:
- Create a script
- Read each line of a note card
- Skip over comments
- Skip blank lines
- Notify the owner of the lines with unknown settings
- Unknown setting name
- Missing delimiter (equal sign)
- Notify the owner of missing configuration note card
- Detect when the notecard has been changed
- Offer case-insensitive settings
- Trim white-space from name/value settings
- Initialize with default values
- Detect that the name of the configuration file is a notecard
- Detect that you have reached the end of the file
- this is a file to configure your application
- blank lines are ignored as well as lines
- proceeded with a "#" sign.
nAmE=Dedric Mauriac
Favorite Color = Aweseome Blue
- This completes this tutorial.
- Come on down for many scripted products at
- Dedric Mauriac's Gadget Shop
- Woodbridge87, 82, 27
<lsl> integer line; string configurationFile = "Application.Config"; key readLineId; string AvatarName; string FavoriteColor;
init() {
// reset configuration values to default
AvatarName = "Unknown";
FavoriteColor = "None";
// make sure the file exists and is a notecard
if(llGetInventoryType(configurationFile) != INVENTORY_NOTECARD)
{
// notify owner of missing file
llOwnerSay("Missing inventory notecard: " + configurationFile);
return; // don't do anything else
}
// initialize to start reading from first line
line = 0;
// read the first line
readLineId = llGetNotecardLine(configurationFile, line++);
} processConfiguration(string data) {
// if we are at the end of the file
if(data == EOF)
{
// notify the owner
llOwnerSay("We are done reading the configuration");
// notify what was read
llOwnerSay("The avatar name is: " + AvatarName);
llOwnerSay("The favorite color is: " + FavoriteColor);
// do not do anything else
return;
}
// if we are not working with a blank line
if(data != "")
{
// if the line does not begin with a comment
if(llSubStringIndex(data, "#") != 0)
{
// find first equal sign
integer i = llSubStringIndex(data, "=");
// if line contains equal sign
if(i != -1)
{
// get name of name/value pair
string name = llGetSubString(data, 0, i - 1);
// get value of name/value pair
string value = llGetSubString(data, i + 1, -1);
// trim name
list temp = llParseString2List(name, [" "], []);
name = llDumpList2String(temp, " ");
// make name lowercase (case insensitive)
name = llToLower(name);
// trim value
temp = llParseString2List(value, [" "], []);
value = llDumpList2String(temp, " ");
// name
if(name == "name")
AvatarName = value;
// color
else if(name == "favorite color")
FavoriteColor = value;
// unknown name
else
llOwnerSay("Unknown configuration value: " + name + " on line " + (string)line);
}
else // line does not contain equal sign
{
llOwnerSay("Configuration could not be read on line " + (string)line);
}
}
}
// read the next line
readLineId = llGetNotecardLine(configurationFile, line++);
} default {
state_entry()
{
init();
}
on_rez(integer start_param)
{
init();
}
changed(integer change)
{
if(change & CHANGED_INVENTORY) init();
else if(change & CHANGED_OWNER) init();
}
dataserver(key request_id, string data)
{
if(request_id == readLineId)
processConfiguration(data);
}
} </lsl>
