Effacer les filtres
Effacer les filtres

How to erase a specific elements for the name of string values and then replace them?

2 vues (au cours des 30 derniers jours)
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 commentaires
Stephen23
Stephen23 le 17 Avr 2024
Modifié(e) : Stephen23 le 17 Avr 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.

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 17 Avr 2024
Modifié(e) : Adam Danz le 17 Avr 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}])
newStr = "Temp_Feb = 32;"
  4 commentaires
Stephen23
Stephen23 le 18 Avr 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)}')
new = "Temp_Feb = 32;"
Ahmad Al-Issa
Ahmad Al-Issa le 18 Avr 2024
Modifié(e) : Ahmad Al-Issa le 18 Avr 2024
Thank you Stephen. This is also a good approach.

Connectez-vous pour commenter.

Plus de réponses (1)

Jon
Jon le 17 Avr 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]'
yyyy = 4x1
2023 2023 2023 2024
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
mm = [8,4, 2, 3 ]'
mm = 4x1
8 4 2 3
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
dd = [15,18,6, 2]'
dd = 4x1
15 18 6 2
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
hh = [9,13,8,23]'
hh = 4x1
9 13 8 23
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
mi = [15,18,59,42]'
mi = 4x1
15 18 59 42
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
sec = [11,22,19,49]'
sec = 4x1
11 22 19 49
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
T = [29,15.3,22, 36.4]'
T = 4x1
29.0000 15.3000 22.0000 36.4000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
time = datetime(yyyy,mm,dd,hh,mi,sec);
Tdata = table(time,T)
Tdata = 4x2 table
time T ____________________ ____ 15-Aug-2023 09:15:11 29 18-Apr-2023 13:18:22 15.3 06-Feb-2023 08:59:19 22 02-Mar-2024 23:42:49 36.4
% Find the temperature for February (month = 2)
idl = month(Tdata.time) == 2;
Tdata.T(idl)
ans = 22
  9 commentaires
Jon
Jon le 17 Avr 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'
s1 = 'Temp_15_05_24_10_44_22'
time = datetime(s1(6:end),'InputFormat','dd_MM_yy_HH_mm_ss')
time = datetime
15-May-2024 10:44:22
mname = month(time,"shortname");
s2 = "Temp_" + mname{1}
s2 = "Temp_May"
Ahmad Al-Issa
Ahmad Al-Issa le 17 Avr 2024
@Jon Thanks a lot. This solution is easier and better.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by