.NET 3.x Создание пользовательской функции в MathCAD 11 - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго и

уни

, пытаюсь написать простенькую функцию для mathcad 11 (более шустрая версия) почитав статью на хабре и примеры , функция чтения файла
Листинг программы
  1. Imports System.Reflection
  2. Imports NetEFI
  3. Public Class readfile
  4. Implements IFunction
  5. Private _info As FunctionInfo
  6. Public ReadOnly Property Info() As FunctionInfo Implements IFunction.Info
  7. Get
  8. Return _info
  9. End Get
  10. End Property
  11. Public Sub New()
  12. _info = New FunctionInfo("readfile", "filepatch", "dilimited", _
  13. New Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath, _
  14. GetType(String), _
  15. New Type() {GetType(String), GetType(String)}) ', GetType(TComplex(,))
  16. End Sub
  17. Public Function GetFunctionInfo(ByVal lang As String) As FunctionInfo Implements IFunction.GetFunctionInfo
  18. Return Info
  19. End Function
  20. Public Function NumericEvaluation(ByVal args As Object(), ByRef result As Object) As Boolean Implements IFunction.NumericEvaluation
  21. Dim array As String(,) = Nothing
  22. result = array
  23. Try
  24. Dim dfile = DirectCast(args(0), [String])
  25. Dim dilimeted = DirectCast(args(1), [String])
  26.  
  27. Dim fStream As New System.IO.FileStream(dfile, IO.FileMode.Open)
  28. Dim sReader As New System.IO.StreamReader(fStream)
  29. Dim sArray As String()
  30. Dim I As Integer = 0
  31. Do While sReader.Peek >= 0
  32. ReDim Preserve sArray(I)
  33. sArray(I) = sReader.ReadLine
  34. I += 1
  35. Loop
  36. Dim rows As Integer = sArray.Length - 1
  37. Dim cols As Integer = sArray(0).Split(";").Length - 1
  38. 'Dim array(rows, cols) As String
  39. Dim _array As String()
  40. For K As Integer = 0 To rows
  41. For J As Integer = 0 To cols
  42. _array = sArray(K).Split(New Char() {";"})
  43. array(K, J) = _array(J)
  44. Next
  45. Next
  46. result = array
  47. Catch ex As Exception
  48. Return False
  49. End Try
  50. End Function
  51. End Class
вызываю ее и - ошибка - "general protection error" наверно все объявления переменных в вункции

NumericEvaluation

кроме первой - ошибочны но и конвертировать в TComplex не получается - невозможно преобразовать string в TComplex

Решение задачи: «.NET 3.x Создание пользовательской функции в MathCAD 11»

textual
Листинг программы
  1. Imports System.Reflection
  2. Imports NetEFI
  3. Imports System.IO
  4.  
  5. Public Class readfile
  6.  
  7.     Implements IFunction
  8.     Private _info As FunctionInfo
  9.  
  10.     Public ReadOnly Property Info() As FunctionInfo Implements IFunction.Info
  11.         Get
  12.             Return _info
  13.         End Get
  14.     End Property
  15.  
  16.     Public Sub New()
  17.  
  18.         _info = New FunctionInfo("readfile", "filepatch", "dilimited", _
  19.             New Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath, _
  20.             GetType(String), _
  21.             New Type() {GetType(String), GetType(String), GetType(TComplex), GetType(TComplex), GetType(TComplex)}) ', GetType(TComplex(,))
  22.     End Sub
  23.  
  24.     Public Function GetFunctionInfo(ByVal lang As String) As FunctionInfo Implements IFunction.GetFunctionInfo
  25.  
  26.         Return Info
  27.     End Function
  28.     Private Function readf(dfile As String, dilimited As String, n As Integer, z As Integer, x As Integer) As String
  29.         On Error Resume Next
  30.         If File.Exists(dfile) Then
  31.             Dim sReader As New System.IO.StreamReader(dfile, System.Text.Encoding.UTF8)
  32.             Dim sArray As String()
  33.             Dim I As Integer = 0
  34.             Do While sReader.Peek >= 0
  35.                 ReDim Preserve sArray(I)
  36.                 sArray(I) = sReader.ReadLine
  37.                 I += 1
  38.             Loop
  39.             If Not IsNothing(sArray) Then
  40.                 Dim rows As Integer = sArray.Length - 1
  41.                 Dim cols As Integer = sArray(0).Split(dilimited).Length - 1
  42.                 If n = 1 Then
  43.                     readf = rows.ToString
  44.                     rows = Nothing
  45.                 ElseIf n = 2 Then
  46.                     readf = cols.ToString
  47.                     cols = Nothing
  48.                 ElseIf n = 3 Then
  49.                     Dim _array As String()
  50.                     Dim array(rows, cols) As String
  51.                     For K As Integer = 0 To rows
  52.                         For J As Integer = 0 To cols
  53.                             _array = sArray(K).Split(New Char() {dilimited})
  54.                             array(K, J) = _array(J)
  55.                         Next
  56.                     Next
  57.                     readf = array(z, x)
  58.                     Erase array
  59.                     Erase _array
  60.                 End If
  61.             Else
  62.                 readf = "null"
  63.             End If
  64.             Erase sArray
  65.             sReader.Close()
  66.         Else
  67.             readf = "error file patch"
  68.         End If
  69.     End Function
  70.  
  71.     Public Function NumericEvaluation(ByVal args As Object(), ByRef result As Object) As Boolean Implements IFunction.NumericEvaluation
  72.  
  73.  
  74.         Dim dfile = DirectCast(args(0), [String])
  75.         Dim dilimited = DirectCast(args(1), [String])
  76.         Dim n = CInt(DirectCast(args(2), TComplex).Real)
  77.         Dim z As Integer = CInt(DirectCast(args(3), TComplex).Real)
  78.         Dim x As Integer = CInt(DirectCast(args(4), TComplex).Real)
  79.  
  80.         result = readf(dfile, dilimited, n, z, x)
  81.     End Function
  82.  
  83. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы