0

我即将指向字符串中指定的数字并更改它们。给出了输入“ip_digit”和“pos”。“pos”指定要更改的数字,ip_digit 是数字的新值。

port = "1234"
ip["port"] = tonumber(("%s%s%s"):format(port:sub(1,pos-1), ip_digit, port:sub(pos+1)))
print(ip["port"])

.

Output:
1234

输出很好。现在我正在浏览终端中的数字并更改光标指向的数字。在 3. Digit a > 0 < 被插入并且不能更改。现在的输出是:

12304

当我尝试更改“0 位”时,不应该存在的 5 位被更改了。

这个怎么可能?我认为'port:sub(pos + 1)'可以走一远,但事实并非如此。

编辑:

ip_digit = com:read(nil) -- only accepted if 0-9
ip[port] = 1234

function replace_digit_in_IP(oct,pos)
if oct then -- issue is IP-Address
    do_something()
else -- issue is PORT
    port = tostring(ip["port"])
    os.syslog(ip["port"]) -- output is '1234' in example
    os.syslog(port) -- output is '1234' in example
    ip["port"] = tonumber(("%s%s%s"):format(port:sub(1,pos-1), ip_digit, port:sub(pos+1)))
    os.syslog(ip["port"]) -- output is 1234 or 12304 if 4th digit is altered.
end
cursorToNextBoxRight()--moves cursor one digit right in field, if there's none, move to digit at pos 1
os.syslog(string.format("x_index = %i,  y_index = %i",x_index,y_index)) -- debug(cursor pos)
print_menu()--prints text to terminal

end

replace_digit_in_IP(nil,3)

可视化问题:

 1 2 3 4      (port-output)
 ^            (cursor)       

步骤“箭头键右”

1 2 3 4       (port-output)
  ^           (cursor)

step "input '9'" (数值输入也向右移动一位,改变后)

1 9 3 4       (port-output)
    ^         (cursor)

步骤“输入'9'”(向右移动)

1 9 9 0 4       (port-output)
      ^         (cursor)

步骤“输入'9'”(向右移动,无效所以移动到#1)

1 9 9 0 9       (port-output)
^               (cursor)
4

1 回答 1

0

我看不出你的代码有什么问题,所以问题出在其他地方:

function replace_digit_in_IP(port, pos, digit)
    port = tostring(port)
    port = ("%s%s%s"):format(port:sub(1,pos-1), digit, port:sub(pos+1))
    return tonumber(port)
end

port = 1234
port = replace_digit_in_IP(port, 1, '9')
print(port)
port = replace_digit_in_IP(port, 2, '8')
print(port)
port = replace_digit_in_IP(port, 3, '7')
print(port)
port = replace_digit_in_IP(port, 4, '6')
print(port)

也许系统日志不喜欢数字。尝试删除你的tostringand tonumber,并让ip['port']总是包含一个字符串。

于 2014-09-02T04:46:09.690 回答