在NetLogoWeb中是否有替代read-from-string?我需要输入字段中的字符串。该字符串包含一些整数,应转换为列表。在NetLogo中,我使用以下代码:
to-report get-demand
report reverse sort read-from-string ( word "[" the-field-name "]")
end
但是,似乎在NetLogoWeb中还没有实现read-from-string。任何方式?
非常感谢和祝福, 米甲
P.S。非常感谢开发NetLogoWeb。我真的很想念NetLogo插件。
答案 0 :(得分:2)
不幸的是,我们尚未向NetLogo Web添加对read-from-string
的支持。它可能在不久的将来也不会出现在那里。
此处提供的代码是否为您提供了真正的代码?我认为它不是,但是,如果它是,你可以这样做同样的效果:
to-report get-demand
report reverse sort (list the-field-name)
end
(也就是说,如果the-field-name
听起来像,那将是一个仅包含某些"字段"的名称的字符串。)
我认为你的真实情况更复杂。如果我看到真正的代码,我或许可以提供更好的解决方法。您确定无法使用tasks解决问题吗?
答案 1 :(得分:1)
基于前面的答案(该命令不会很快实现),似乎唯一的解决方案是实现一个简单的解析器,即类似的东西(适用于由空格分隔的整数):
to-report string-to-list [ s ]
let l []
let ss ""
let n 0
let mode "out"
repeat length s [
set ss first s
set s but-first s
if ( ( ss = " ") and ( mode = "in" ) ) [
set mode "out"
set l lput n l
set n 0
]
if ( member? ss "0123456789") [
set mode "in"
set n ( n * 10 ) + ( position ss "0123456789" )
]
]
if ( mode = "in" ) [ set l lput n l ]
report l
end
报告者获取一个字符串s并返回一个整数列表。
或者有没有更简单的方法来实现它?
答案 2 :(得分:1)
我建议:
to-report string-to-numbers [s]
if empty? s [ report [] ]
if first s = " " [ report string-to-numbers butfirst s ]
let pos position " " s
ifelse not is-number? pos
[ report (list string-to-number s) ]
[ report fput string-to-number substring s 0 pos
string-to-numbers substring s (pos + 1) length s ]
end
to-report string-to-number [s]
report reduce [10 * ?1 + ?2]
map [position ? "0123456789"]
explode s
end
to-report explode [s]
report map [item ? s] n-values (length s) [?]
end
示例运行:
observer> show string-to-numbers "12 345 67"
observer: [12 345 67]
我确认这适用于桌面NetLogo和NetLogo Web。