MATLAB Answers

0

How to replace a part of string in a cell array with a string that changes?

Asked by Heidi Mäkitalo on 27 Jun 2019
Latest activity Commented on by Heidi Mäkitalo on 27 Jun 2019
Hello all,
I find it a little difficult to describe my problem accurately but basically, I have the following cell array:
{'0,31:1.03_SPEED_MEASURED_1_rpm'}
{'0,32:1.03_SPEED_MEASURED_1_rpm'}
{'0,33:1.03_SPEED_MEASURED_1_rpm'}
{'0,34:1.03_SPEED_MEASURED_1_rpm'}
{'0,31:1.04_MOTOR_SPEED_rpm' }
{'0,32:1.04_MOTOR_SPEED_rpm' }
{'0,33:1.04_MOTOR_SPEED_rpm' }
{'0,34:1.04_MOTOR_SPEED_rpm' }
{'0,31:1.08_MOTOR_TORQUE_pct' }
{'0,32:1.08_MOTOR_TORQUE_pct' }
{'0,33:1.08_MOTOR_TORQUE_pct' }
{'0,34:1.08_MOTOR_TORQUE_pct' }
{'0,31:25.04_TORQUE_REF_B_pct' }
{'0,32:25.04_TORQUE_REF_B_pct' }
{'0,33:25.04_TORQUE_REF_B_pct' }
{'0,34:25.04_TORQUE_REF_B_pct' }
And what I want to do is replace the numbers at the beginning of each cell ("0,31:1.03" and so on) so that in the end the cell array looks like this:
{'SD1_SPEED_MEASURED_1_rpm'}
{'SD2_SPEED_MEASURED_1_rpm'}
{'SD3_SPEED_MEASURED_1_rpm'}
{'SD4_SPEED_MEASURED_1_rpm'}
{'SD1_MOTOR_CURRENT_A' }
{'SD2_MOTOR_CURRENT_A' }
{'SD3_MOTOR_CURRENT_A' }
{'SD4_MOTOR_CURRENT_A' }
{'SD1_TORQ_USED_REF_%' }
{'SD2_TORQ_USED_REF_%' }
{'SD3_TORQ_USED_REF_%' }
{'SD4_TORQ_USED_REF_%' }
{'SD1_MOTOR_TORQUE_%' }
{'SD2_MOTOR_TORQUE_%' }
{'SD3_MOTOR_TORQUE_%' }
{'SD4_MOTOR_TORQUE_%' }
{'SD1_TORQUE_REF_3_%' }
{'SD2_TORQUE_REF_3_%' }
{'SD3_TORQUE_REF_3_%' }
{'SD4_TORQUE_REF_3_%' }
How can I do this kind of thing where I replace string with a string that changes in a systematic way, from SD1 to SD4? The number of rows isn't always the same but it is always a multiple of four so the first cell should always start with 'SD1_...' and the last cell with 'SD4_...'.
Edit: Forgot to mention, but I was considering doing this with a for- or while-loop, but apparently that's not recommended in Matlab? Why is that, and how should I then do it?
Edit 2: I should also mention that the numbers at the beginning of the cells are not always the same. However, they always looks more or less the same: #,##:##.##
I hope you understood what I'm going for, and thanks for any help in advance!

  1 Comment

REad about strrep. Run a loop with if elses.

Sign in to comment.

1 Answer

Answer by Stephen Cobeldick on 27 Jun 2019
 Accepted Answer

>> D = regexprep(C,'^\d+,\d+(\d):\d+\.\d+','SD$1');
>> D{:}
ans = SD1_SPEED_MEASURED_1_rpm
ans = SD2_SPEED_MEASURED_1_rpm
ans = SD3_SPEED_MEASURED_1_rpm
ans = SD4_SPEED_MEASURED_1_rpm
ans = SD1_MOTOR_SPEED_rpm
ans = SD2_MOTOR_SPEED_rpm
ans = SD3_MOTOR_SPEED_rpm
ans = SD4_MOTOR_SPEED_rpm
ans = SD1_MOTOR_TORQUE_pct
ans = SD2_MOTOR_TORQUE_pct
ans = SD3_MOTOR_TORQUE_pct
ans = SD4_MOTOR_TORQUE_pct
ans = SD1_TORQUE_REF_B_pct
ans = SD2_TORQUE_REF_B_pct
ans = SD3_TORQUE_REF_B_pct
ans = SD4_TORQUE_REF_B_pct

  1 Comment

Sign in to comment.