@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
  • Вопрос задан
  • 663 просмотра
Пригласить эксперта
Ответы на вопрос 3
Не думаю, что это хорошая идея. С трансляцией кода обычно ничего хорошего не выходит.

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы