regex 将索引增加1 -将C代码转换为MATLAB

blmhpbnm  于 2023-06-25  发布在  Matlab
关注(0)|答案(1)|浏览(106)

我正在手动将C代码转换为MATLAB。
代码包含如下赋值:
y[10] = p[32]+(p[31]-p[32])*pow(p_c[0],p[34])/(pow(p_c[0],p[34])+pow(p[33],p[34]));
为了在MATLAB中使用它,我手动将所有索引的值增加1,因为MATLAB中的索引从1开始。
y[10+1] = p[32+1]+(p[31+1]-p[32+1])*pow(p_c[0+1],p[34+1])/(pow(p_c[0+1],p[34+1])+pow(p[33+1],p[34+1]));
有没有一个简单的方法来完成这个任务?大约有30个任务像上面的例子,我试图避免手动完成。
编辑1:是否可以使用正则表达式?我可以复制文本文件中包含赋值的所有代码行。使用正则表达式,如果我可以找到[35](任何数字),则替换为[35+1]。我不知道如何在代码中实现这一点。
编辑2:代码中其他赋值的示例。

y[0] = ct[0]-x[12];
    y[1] = ct[1]-1*x[10]-x[23]; 
    y[3] = p_c[6]+p_c[5];   
    y[4] = p_c[2];  
    y[5] = x_c[23]+x_c[10]+y_c[1];  
    y[6] = y_c[0]+x_c[12];  
    p[0] = 30;  
    p[1] = 12;  
    p[2] = 2;
    p[3] = 0;
    p[4] = 90;  
    p[5] = 45
    dx[0] = FunctionForD(p[67], p[64], p[66], p[65], p[23], x_c[0], x_c[3], p[49])*p[23]-FunctionForA(y[28], y[29], p[23], y[16])*p[23]+FunctionForD(y[30], y[31], p[23], y[16])*p[23]-FunctionForA(p[134], p[133], p[132], p[130], p[131], p_c[2], p[23], x_c[21], x_c[0], p[49])*p[23];   // 
    dx[1] = FunctionFor2(p[169], p[167], p[168], p[166], p[23], x_c[1], x_c[17], p[49])
laawzig2

laawzig21#

如果你只处理一个数组,你可以想出一种方法来做到这一点。但是这里您要处理8个不同的数组(y, ct, x, p_c, x_c, y_c, p, dx)。作业也没有特别的顺序。它们涉及各种组合。
如果您使用的是Linux/Unix,则可以使用流编辑器(sed)工具来完成此操作。对于Windows,Notepad++(免费)支持正则表达式搜索和替换。看看这个link
如果只有30个任务,最好手动完成。你可以确保每个索引在MATLAB中正确地递增1,方法如下:

#define BMI 1 /* BMI is BASE_MATLAB_INDEX */

y[0 + BMI] = ct[0 + BMI] - x[12 + BMI];

等等

相关问题