convert array string data in array serial number

this example clarify my problem
>> size(B)
ans =
463628 1
>> B(1)
ans =
"01/01/2008"
>> datenum(B(1,:),'dd/mm/yyyy')
ans =
733408
>> datenum(B,'dd/mm/yyyy')
Error using datenum
DATENUM failed.
Caused by:
Error using dtstr2dtnummx
Failed to convert from text to date number.
i can convert the single string but not the array of strings

6 comentarios

Stephen23
Stephen23 el 23 de Mayo de 2023
@Luca Re: please save your data in a MAT file and upload it by clicking the paperclip button.
shamal
shamal el 23 de Mayo de 2023
dataan.m
Stephen23
Stephen23 el 23 de Mayo de 2023
@Luca Re: lots of the DATAAN string elements are empty, i.e. have no characters:
Clearly empty text does not match the specified date format and will fail when you try to parse it with DATENUM.
shamal
shamal el 23 de Mayo de 2023
Editada: shamal el 23 de Mayo de 2023
thank..
they are empty because I have preallocated the variable and not all array vectors have the same number of elements
B=strings(righe,colum);
What do you recommend if I have empty array elements? fill them with false dates for the command to work correctly
Stephen23
Stephen23 el 23 de Mayo de 2023
Editada: Stephen23 el 23 de Mayo de 2023
"What do you recommend if I have empty array elements?"
Use DATETIME instead of deprecated DATENUM:
B = ["01/01/2008";""]
B = 2×1 string array
"01/01/2008" ""
D = datetime(B, "InputFormat","dd/MM/yyyy")
D = 2×1 datetime array
01-Jan-2008 NaT
shamal
shamal el 23 de Mayo de 2023
yes but i want do preallocate it
is it correct to do it like this? (i need 5600 element in this matrix and I have to assign values ​​read from .txt
dataan=NaT(righe,colum);

Iniciar sesión para comentar.

Respuestas (1)

Unless you're using an older release where it is not available I strongly recommend you use datetime instead of serial date numbers. Note I've changed your B slightly to make it clear that datetime is importing it correctly, not confusing the day and month information.
B = "02/03/2008";
dt = datetime(B, "InputFormat", "dd/MM/yyyy")
dt = datetime
02-Mar-2008
With a datetime array a lot of operations are easier and easier to interpret than with a list of date numbers. As an example, what's the day after dt?
nextDay = dt + days(1)
nextDay = datetime
03-Mar-2008

3 comentarios

shamal
shamal el 23 de Mayo de 2023
v =
"01/01/2008"
>> datetime(v,'dd/mm/yyyy' )
Error using datetime
Wrong number of arguments.
i've problem to use it
Stephen23
Stephen23 el 23 de Mayo de 2023
Editada: Stephen23 el 23 de Mayo de 2023
"i've problem to use it"
It will work when you read and follow the DATETIME documentation or the example that Steve Lord showed you. Why did you change the syntax to something completely different?
S = "01/01/2008";
D = datetime(S, 'InputFormat','dd/MM/yyyy')
D = datetime
01-Jan-2008
shamal
shamal el 23 de Mayo de 2023
thanks..I mess around a bit with these formats

Iniciar sesión para comentar.

Categorías

Preguntada:

el 23 de Mayo de 2023

Comentada:

el 23 de Mayo de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by