2012-04-02 65 views
1

我目前正在尝试做的是制作一个电子邮件地址表(作为键),它保存了person_records(作为值)。 person_record在其中包含6个或多个事物。我得到的问题是,当我尝试分配的电子邮件地址作为关键它抱怨,说表索引是零表...这是我到目前为止有:lua哈希表,表索引是否为零?

random_record = split(line, ",") 
person_record = {first_name = random_record[1], last_name = random_record[2], email_address = random_record[3], street_address = random_record[4], city = random_record[5], state = random_record[6]} 
email_table[person_record.email_address] = person_record 

我写的我自己的分割函数,基本上需要一行输入,并拉出6个逗号分隔值并将它们存储在一个表中(random_record)

我试图说email_table [person_record.email_address] = person_record时出现错误。 但是,当我打印出person_record.email_address它不是零,它打印出我存储在其中的字符串..我很困惑。

function split(str, pat) 
    local t = {} -- NOTE: use {n = 0} in Lua-5.0 
    local fpat = "(.-)" .. pat 
    local last_end = 1 
    local s, e, cap = str:find(fpat, 1) 
    while s do 
     if s ~= 1 or cap ~= "" then 
    table.insert(t,cap) 
     end 
     last_end = e+1 
     s, e, cap = str:find(fpat, last_end) 
    end 
    if last_end <= #str then 
     cap = str:sub(last_end) 
     table.insert(t, cap) 
    end 
    return t 
end 
+0

你能发布你得到的确切的错误消息吗? – 2012-04-02 00:24:39

+0

不幸的是,这是确切的错误消息:( “表索引是零” – cj1098 2012-04-02 00:26:57

回答

2

下面的代码是复制并从你的榜样粘贴并运行得很好:

email_table = {} 
random_record = {"first", "second", "third"} 
person_record = {first_name = random_record[1], last_name = random_record[1], email_address = random_record[1]} 
email_table[person_record.email_address] = person_record 

所以你的问题是你split功能。

顺便说一句,Lua没有“hashtables”。它只是具有存储键/值对的“表”。这些恰好是否使用哈希是一个实现细节。

+0

啊。好的..我的教授说lua只有散列表,但我不同意: 所有我对email_table做的是通过email_table初始化它= {} 然后,我把它分配上面的代码..我知道这不是零,因为我可以说像email_table [“HAHA”] = person_record的东西,它的工作原理。我只是不明白为什么它不会允许person_record.email_address ... – cj1098 2012-04-02 00:33:46

+0

@ cj1098:我更新了我的帖子。 – 2012-04-02 00:36:30

+0

多数民众赞成在很奇怪...谢谢!:)我有很多关于卢阿的问题,因为我刚刚开始。我可能会回来:D – cj1098 2012-04-02 00:44:43

0

它看起来像迭代了一些行中有逗号分隔的数据。 看看你的分割函数,只要没有更多的分隔符(,)符号在特定的行中找到,它就会停下来。因此,给它提供少于3个分隔字段的任何东西(对于非常常见的例子:文件结尾处的空行)将产生不会达到[3]的表格。解决任何空表值将返回一个零,所以person_record.email_address将设置为零,以及您的代码的第二行。然后,当您尝试使用存储在person_record.email_address中的这个nil作为第三行中的email_table的索引时,您将得到您提到的确切错误。