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

时间:2018-09-18 06:31:35

标签: regex matlab indexing

我正在将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])

1 个答案:

答案 0 :(得分:1)

如果仅处理一个数组,则可以想出一种方法来执行此操作。但是这里您要处理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];

以此类推...