[Home] [Downloads] [Search] [Help/forum]

Gammon Forum

See www.mushclient.com/spam for dealing with forum spam. Please read the MUSHclient FAQ!

[Folder]  Entire forum
-> [Folder]  MUSHclient
. -> [Folder]  Lua
. . -> [Subject]  Calling data from table keys with long key names.
Home  |  Users  |  Search  |  FAQ
Username:
Register forum user name
Password:
Forgotten password?

Calling data from table keys with long key names.

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page


Posted by Falgor   (21 posts)  [Biography] bio
Date Sun 05 Feb 2017 05:00 PM (UTC)

Amended on Sun 05 Feb 2017 05:01 PM (UTC) by Falgor

Message
I am building a feature to call up individual armour strength and value from a table. I want each table key to be the "name" of that armour, this is so it will be more efficient with triggers to capture what I am wearing, for example (trigger is just an example on what i'll match, not a real trigger):


A shield (worn).
A helmet (worn).

<trigger>
match = "^\W+. \(worn\)\."
regex = "y"
pattern = "
wearing = wildcards[1]
print(armour.wearing.value)
"
<\trigger>


The above just demonstrates why I want to use multi-worded key values, the issue I'm having is the print function won't read the "wearing" string as a table key.

Here is my table:


armour = {}
armour = {
          ["A shield"] = { strength = 100, value = "200" },
          ["A helmet"] = [ strength = 200, value = "150" }
         }


When I try to print a value from the shield or helmet key, it comes up saying the key has a nil value. Here is what I've tried so far:


print(armour.A shield.value)
print(armour."A shield".value)
print(armour.["A shield"].value)

name = "A shield"
print(armour.name.value)

for k,v in pairs(armour) do
print(armour.k.value)
end


Help please, as always thank you in advance.

P.S Am I better off making an excel/access database and setting up a COM object to call the data in from there?


[Go to top] top

Posted by Nick Gammon   Australia  (21,324 posts)  [Biography] bio   Forum Administrator
Date Reply #1 on Sun 05 Feb 2017 09:22 PM (UTC)

Amended on Sun 05 Feb 2017 09:25 PM (UTC) by Nick Gammon

Message

print(armour.wearing.value)


Your problem here is that "wearing" is being taken literally.

In other words, it is looking for armour called "wearing".

What you want is:


print(armour [wearing].value)


Now that uses the contents of the variable "wearing".

The word "value" is OK because you literally have "value" as a key.

In your loop above this works:


for k,v in pairs(armour) do
  print(armour [k].value)
end

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Nick Gammon   Australia  (21,324 posts)  [Biography] bio   Forum Administrator
Date Reply #2 on Sun 05 Feb 2017 09:51 PM (UTC)
Message
Falgor said:

P.S Am I better off making an excel/access database and setting up a COM object to call the data in from there?


No, that would be slower and more complex. What you might do is set up an SQLite3 database (the functions for doing that are built into the client).

That could be handy if you want so share this data between multiple worlds (eg. multiple characters).

For examples of that see http://www.gammon.com.au/db and http://www.gammon.com.au/sql

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Falgor   (21 posts)  [Biography] bio
Date Reply #3 on Mon 06 Feb 2017 09:14 AM (UTC)
Message
Thanks Nick!

This is exactly why I came back to MUSHclient from years with zMUD and cMUD! No more stupid bugs and a still developing and supported client.
[Go to top] top

Posted by Falgor   (21 posts)  [Biography] bio
Date Reply #4 on Mon 06 Feb 2017 03:59 PM (UTC)
Message
On the subject of tables, do they save between sessions? My armour table is going to be large, am I best going down the SQL route?
[Go to top] top

Posted by Nick Gammon   Australia  (21,324 posts)  [Biography] bio   Forum Administrator
Date Reply #5 on Mon 06 Feb 2017 08:40 PM (UTC)
Message
Not automatically, however see this:

http://www.gammon.com.au/forum/?id=4960

If you use SQL writes happen immediately, if you serialize a table it is only written when you save the world.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Falgor   (21 posts)  [Biography] bio
Date Reply #6 on Tue 07 Feb 2017 09:51 AM (UTC)
Message
Thanks, next up the mapper! :)
[Go to top] top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


1,966 views.

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page

Go to topic:           Search the forum


[Go to top] top

Quick links: MUSHclient. MUSHclient help. Forum shortcuts. Posting templates. Lua modules. Lua documentation.

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.

[Home]


Written by Nick Gammon - 5K   profile for Nick Gammon on Stack Exchange, a network of free, community-driven Q&A sites   Marriage equality

Comments to: Gammon Software support
[RH click to get RSS URL] Forum RSS feed ( https://gammon.com.au/rss/forum.xml )

[Best viewed with any browser - 2K]    [Hosted at FutureQuest]