ошибка разбиения строки в скомпилированном классе VB.NET - PullRequest
0 голосов
/ 01 апреля 2010

У меня возникли проблемы с компиляцией некоторого кода VB, который я написал для разделения строки на основе набора предопределенных разделителей (запятая, точка с запятой, двоеточие и т. Д.). Я успешно написал некоторый код, который можно загрузить в пользовательский компонент VB (я помещаю этот код в компонент VB.NET в плагин Grasshopper), и все работает отлично. Например, допустим, моя входящая строка «123,456». Когда я передаю эту строку в код VB, который я написал, я получаю новый список, в котором первое значение равно «123», а второе - «456».
Тем не менее, я пытался скомпилировать этот код в его собственный класс, чтобы я мог загрузить его в Grasshopper отдельно от стандартного компонента VB. Когда я пытаюсь скомпилировать этот код, он не разделяет строку в новый список с двумя значениями. Вместо этого я получаю сообщение «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

Конечный класс

Это пользовательский код VB, который я создал внутри Grasshopper:

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

End Sub

Конечный класс

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Ну, ничего не зная о Кузнечике, мне просто нужно догадаться ...

System.String [] - это то, что .NET напечатал бы, если бы вы вызвали ToString() в строковом массиве. Итак, я предполагаю, что вы дали Grasshopper массив, в котором он хочет одну строку.

Итак, немного подумав, как насчет того, что мы попробуем:

Dim parts As String() = myString.Split("|"c) 
For I = 0 to parts.Length -1
    DA.SetData(I, parts[I]) 
0 голосов
/ 02 апреля 2010

Хорошо, я попробовал фрагмент кода, который вы предложили ... но он не совсем сработал. Я думаю, что проблема в исходном коде заключается в том, что я пытаюсь отправить список значений (т.е. частей) на один выходной узел. Поэтому, когда я использую DA.SetData (0, parts), я записываю список значений в первый выходной узел моего скомпилированного компонента. Однако, я думаю, проблема в том, что компонент не знает, что части - это список. В приведенном выше примере, если моя входящая строка - «123 456», то мой список результатов должен иметь два значения (123 и 456). Я не думаю, что я объявил части, чтобы быть списком. У вас есть идеи, как это сделать? Опять же, если вы нажмете на ссылку в исходном письме (при использовании Internet Explorer ... Я не уверен, почему Firefox не открывает его), вы должны увидеть скриншот установки в плагине Grasshopper, который должен помочь идея о том, что происходит. Еще раз спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...