在NetLogoWeb中使用read-from-string?

时间:2015-09-01 09:56:43

标签: netlogo

在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插件。

3 个答案:

答案 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。