How to erase a specific elements for the name of string values and then replace them?
3 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
I have names of values in this form:
dd_mm_yy_hh_mm_ss
for example:
Temp_06_02_24_10_39_34 = 32;
I would like to select only the number for the month (02) and replace it with the coresponding name of month in order to creat new value, for example:
Temp_Feb = 32;
How can I do this ?
Best regards, Ahmad
采纳的回答
Adam Danz
2024-4-17
编辑:Adam Danz
2024-4-17
Assumptions:
- "Temp_06_02_24_10_39_34 = 32"; is a string
- This is not a variable name
- The month is in the 2nd numeric position (02, above)
- The goal is to replace the entire day_month_year_hour_minute_second datetime with the 3-letter abbreviation for the month.
str = "Temp_06_02_24_10_39_34 = 32;";
% Extract the month number and convert to short month name
[~,dtParts] = regexp(str, '_(\d+)','match','tokens');
monthStr = month(datetime(str2double([dtParts{:}])),'shortname');
% Replace the datetime portion with the short month name
newStr = regexprep(str, '(_\d+){6}',['_',monthStr{1}])
4 个评论
Stephen23
2024-4-18
Here is an approach using a dynamic regular expression. This avoids the extra REGEXP and MONTH function calls.
str = "Temp_06_02_24_10_39_34 = 32;";
fnh = @(s)char(datetime(s,'InputFormat','_dd_MM_yy_hh_mm_ss','Format','MMM'));
new = regexprep(str,'(_\d+){6}','_${fnh($0)}')
更多回答(1 个)
Jon
2024-4-17
I would suggest in general that you not embed the date time data in the variable name. Instead use a table, timetable, or some other data structure to hold these values along with the temperatures. Here's a little example using just a MATLAB table
% Make example table to hold data
yyyy = [2023,2023,2023,2024]'
mm = [8,4, 2, 3 ]'
dd = [15,18,6, 2]'
hh = [9,13,8,23]'
mi = [15,18,59,42]'
sec = [11,22,19,49]'
T = [29,15.3,22, 36.4]'
time = datetime(yyyy,mm,dd,hh,mi,sec);
Tdata = table(time,T)
% Find the temperature for February (month = 2)
idl = month(Tdata.time) == 2;
Tdata.T(idl)
9 个评论
Jon
2024-4-17
Here is an approach for extracting the month from a string with day month year ..and then creating a new string with just the month
s1 = 'Temp_15_05_24_10_44_22'
time = datetime(s1(6:end),'InputFormat','dd_MM_yy_HH_mm_ss')
mname = month(time,"shortname");
s2 = "Temp_" + mname{1}
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Whos 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!