我在编译一些VB代码时遇到了一些困难,我编写了一些VB代码,以便根据一组预定义的参数(逗号、分号、冒号等)来拆分字符串。我已经成功地编写了一些代码,这些代码可以加载到定制的VB组件中(我将这些代码放在称为Grasshopper的插件中的VB.NET组件中),一切都很好。例如,假设我的传入字符串是"123,456“。当我将这个字符串输入我编写的VB代码时,我会得到一个新的列表,其中第一个值是"123“,第二个值是"456”。
但是,我一直试图将这段代码编译到它自己的类中,这样我就可以从标准的VB组件中分别在Grasshopper中加载它。当我试图编译这段代码时,它并不是将字符串分割成一个包含两个值的新列表。相反,我收到一条信息,上面写着"System.String []“。你们觉得我的编译代码有什么问题吗?您可以在以下链接中找到我的问题的截图图像:单击以查看图像
这是编译后的类的VB代码:
Public Class SplitString
Inherits GH_Component
Public Sub New()
MyBase.New("Split String", "Split", "Splits a string based on delimeters", "FireFly", "Serial")
End Sub
Public Overrides ReadOnly Property ComponentGuid() As System.Guid
Get
Return New Guid("3205caae-03a8-409d-8778-6b0f8971df52")
End Get
End Property
Protected Overrides ReadOnly Property Internal_Icon_24x24() As System.Drawing.Bitmap
Get
Return My.Resources.icon_splitstring
End Get
End Property
Protected Overrides Sub RegisterInputParams(ByVal pManager As Grasshopper.Kernel.GH_Component.GH_InputParamManager)
pManager.Register_StringParam("String", "S", "Incoming string separated by a delimeter like a comma, semi-colon, colon, or forward slash", False)
End Sub
Protected Overrides Sub RegisterOutputParams(ByVal pManager As Grasshopper.Kernel.GH_Component.GH_OutputParamManager)
pManager.Register_StringParam("Tokenized Output", "O", "Tokenized Output")
End Sub
Protected Overrides Sub SolveInstance(ByVal DA As Grasshopper.Kernel.IGH_DataAccess)
Dim myString As String
DA.GetData(0, myString)
myString = myString.Replace(",", "|")
myString = myString.Replace(":", "|")
myString = myString.Replace(";", "|")
myString = myString.Replace("/", "|")
myString = myString.Replace(")(", "|")
myString = myString.Replace("(", String.Empty)
myString = myString.Replace(")", String.Empty)
Dim parts As String() = myString.Split("|"c)
DA.SetData(0, parts)
End Sub端级
这是我在Grasshopper:中创建的自定义VB代码
Private Sub RunScript(ByVal myString As String, ByRef A As Object)
myString = myString.Replace(",", "|")
myString = myString.Replace(":", "|")
myString = myString.Replace(";", "|")
myString = myString.Replace("/", "|")
myString = myString.Replace(")(", "|")
myString = myString.Replace("(", String.Empty)
myString = myString.Replace(")", String.Empty)
Dim parts As String() = myString.Split("|"c)
A = parts结束子对象
‘
‘
端级
发布于 2010-04-01 17:51:46
嗯,对蚱蜢一无所知,我只能猜.
如果在字符串数组上调用System.String [],.NET将打印ToString()。所以,我猜你给了Grasshopper一个数组,它想要一个字符串。
所以,再猜一猜,不如我们试试:
Dim parts As String() = myString.Split("|"c)
For I = 0 to parts.Length -1
DA.SetData(I, parts[I]) 发布于 2010-04-02 15:04:43
我试过你建议的代码片段..。但效果不太好。我认为原始代码中的问题是我试图发送一个值列表(即。(部件)到单个输出节点。因此,当我使用DA.SetData(0,parts)时,我要为编译后的组件的第一个输出节点编写一个值列表。但是,我认为问题在于组件不知道部件是一个列表。在前面给出的示例中,如果传入的字符串是“123 456”,那么我的结果拆分列表应该有两个值(123和456)。我不认为我已经宣布了部分是一个清单。你对怎么做有什么想法吗?同样,如果您单击原始电子邮件中的链接(同时使用Internet Explorer).我不知道为什么Firefox不打开它),你应该在Grasshopper插件中看到设置的屏幕截图,这将帮助你了解正在发生的事情。再次感谢你的帮助。
https://stackoverflow.com/questions/2562401
复制相似问题