@RicardoGonsales

Как перевести код с Matlab на C#?

Здравствуйте!
Есть один довольно большой проект на MATLAB, который желательно перевести на С#

Проект написан классами, пример кода ниже, сам код сделан похожим на шарповый.

Я прекрасно понимаю, что надо будет расставлять типы, делать какие-то интерфейсы, что автоматизированных утилит я вряд ли найду, и что надо будет пилить это руками, но пугает объем - несколько тысяч (хз, тысячи 3-4) строк кода.

Есть ли хотя бы какие-то конвертеры синтаксиса, чтобы не менять все эти function.... end, if... end, for... end на классический синтаксис фигурными скобками?
Пример кода. Весь код в таком ООП стиле: класс-методы-наследование, есть ивенты

classdef ENode<handle
   
    properties
        nodes_range %Диапазон схемных узлов, соответствующих графическому узлу Зачем нужен?
        connected_elements={};
        is_repacked=false
    end
    
    
    methods
        
        function copy_object=Clone(this)
            constructor=str2func(class(this));
            copy_object=constructor(this.nodes_range);
            %!!! У КОПИИ is_repacked=false!!!
        end
            
        function this=ENode(nodes_range)
             if nargin==1
                 this.nodes_range=nodes_range;                
             end         
        end
        
        function RefreshNodeRange(this,deleted_range) 
           if ~isempty(deleted_range)

                has_selfnode_deleted=false;
                new_range=this.nodes_range;
                        for i=1:length(deleted_range)
                            for j=1:length(this.nodes_range)
                                if deleted_range(i)<this.nodes_range(j)
                                    new_range(j)=new_range(j)-1;
                                elseif deleted_range(i)==this.nodes_range(j) 
                                    new_range(j)=0; %присваивем ему нулевой диапазон
                                    has_selfnode_deleted=true;
                                end
                            end
                        end
                        
                        %На случай, если мы удаляем узел, входящий в
                        %диапазон логического узла
                        if has_selfnode_deleted %если мы удаляли и свои узлы
                            k=1;
                            while 1
                                if new_range(k)==0
                                    new_range=[];
                                else
                                    k=k+1;
                                end
                                if k>length(this.nodes_range)
                                    break
                                end
                            end
                        end
                this.nodes_range=new_range;    
                %2)Диапазон лежит целиком ниже (удаляется нижестоящий) или совпадает (удаляется сам элемент). Тогда ничего не делаем.
           end    
        end

    end
end
  • Вопрос задан
  • 671 просмотр
Пригласить эксперта
Ответы на вопрос 3
2ord
@2ord
Не думаю, что это хорошая идея. С трансляцией кода обычно ничего хорошего не выходит.

Преимущество использования MatLab состоит в векторизации вычислений. Без них код выполняется значительно медленнее. Судя по куску кода, он был написан будто на императивном языке. Если всё написано в таком духе, то, возможно, должно быть проще вручную класс за классом перевести.

Но на всякий случай дам ссылочку: MATLAB Runtime Web Server
Ответ написан
Комментировать
@RicardoGonsales Автор вопроса
1) Нужен именно С# код (потому что потом будет слияние с другим проектом)
2) Я готов смириться с ручным переписыванием/дописыванием чего-то, проблема скорее в автозамене
MATLAB
for i=1:n
...
end

Я бы хотел получить автоматизированную трансляцию в вид
C#
for (i=1; i<n; i++)
{ ... }

И так для всех if-ов, while-ов и т.п. Там весь код из таких вещей, в основном и состоит.
Цикл внутри цикла с ветвлением. Матричная математика там составляет незначительную часть.

Может быть, есть хотя бы для каких-то других языков подобные программы для автозамены?
Ответ написан
regexp для этих целей не подходят?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы