How to erase a specific elements for the name of string values and then replace them?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ahmad Al-Issa
am 17 Apr. 2024
Bearbeitet: Ahmad Al-Issa
am 18 Apr. 2024
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
3 Kommentare
Stephen23
am 17 Apr. 2024
Bearbeitet: Stephen23
am 17 Apr. 2024
Very bad data design has meta-data (e.g. dates) in variable names. Such badly-designed data will force you into writing slow, complex, inefficient, obfuscated code that is fragile/buggy and hard to debug. Best avoided:
Learn to use arrays.
Akzeptierte Antwort
Adam Danz
am 17 Apr. 2024
Bearbeitet: Adam Danz
am 17 Apr. 2024
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 Kommentare
Stephen23
am 18 Apr. 2024
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)}')
Weitere Antworten (1)
Jon
am 17 Apr. 2024
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 Kommentare
Jon
am 17 Apr. 2024
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}
Siehe auch
Kategorien
Mehr zu Whos finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!