vertical concatenate strings in msgbox

5 Ansichten (letzte 30 Tage)
Jason am 28 Jan. 2023
Bearbeitet: Jason am 28 Jan. 2023
Hello,I cant understand why this vertical concatenation of strings isn't working.
%Get info from video
D=['Duration(s): ',num2str(v.Duration,'%.2f')]
B=['BitsperPixel: ',num2str(v.BitsPerPixel)]
F=['FrameRate: ',num2str(v.FrameRate)]
N=['Num Frames: ',num2str(v.NumFrames)]
mstr=([D;F;B;N])
f = msgbox(mstr,'icon','help');
waitforbuttonpress; %Block matlab until msgbox button is pressed
Gives an error: Dimensions of arrays being concatenated are not consistent
0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

cdawg am 28 Jan. 2023
Bearbeitet: cdawg am 28 Jan. 2023
Each one of those isn't a string. If you look at D, F, B, and N in your workspace they are character vectors. For example, if I choose a value for duration:
D = ['Duraction(s): ', num2str(100)];
ischar(D)
ans = logical
1
length(D)
ans = 17
D is as long as however may characters it has. That would mean that each of the vectors your concatenating would need to have the same number of characters.
But if I use "string" instead of 'character'
D=["Duration(s): ",num2str(100)];
isstring(D)
ans = logical
1
length(D)
ans = 2
Each vector will have a length of 2. If you want Duration and num2str to be together in one cell, try using strcat()
D=strcat("Duration(s): ",num2str(100));
B=strcat("BitsperPixel: ",num2str(1000));
F=strcat("FrameRate: ",num2str(10000));
N=strcat("Num Frames: ",num2str(1000));
mstr=([D;F;B;N])
mstr = 4×1 string array
"Duration(s): 100" "FrameRate: 10000" "BitsperPixel: 1000" "Num Frames: 1000"
3 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
Sulaymon Eshkabilov am 28 Jan. 2023
Bearbeitet: Sulaymon Eshkabilov am 28 Jan. 2023
Here strcat is not necessary. The straight and complete answer is the use of {} instead of [ ] to have the messaeg in the msgbox.
%Get info from video
v.Duration=4.70;
v.BitsPerPixel = 24;
v.FrameRate=30;
v.NumFrames=141;
D=['Duration(s): ',num2str(v.Duration,'%.2f')]
D = 'Duration(s): 4.70'
B=['BitsperPixel: ',num2str(v.BitsPerPixel)]
B = 'BitsperPixel: 24'
F=['FrameRate: ',num2str(v.FrameRate)]
F = 'FrameRate: 30'
N=['Num Frames: ',num2str(v.NumFrames)]
N = 'Num Frames: 141'
mstr=({D;F;B;N}) % Use braces
mstr = 4×1 cell array
{'Duration(s): 4.70'} {'FrameRate: 30' } {'BitsperPixel: 24' } {'Num Frames: 141' }
f = msgbox(mstr,'icon','help');
Jason am 28 Jan. 2023
Bearbeitet: Jason am 28 Jan. 2023

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sulaymon Eshkabilov am 28 Jan. 2023
Here is the corrected code:
%Get info from video
D=['Duration(s): ',num2str(v.Duration,'%.2f')]
B=['BitsperPixel: ',num2str(v.BitsPerPixel)]
F=['FrameRate: ',num2str(v.FrameRate)]
N=['Num Frames: ',num2str(v.NumFrames)]
mstr=({D;F;B;N}) % Use braces
f = msgbox(mstr,'icon','help');
waitforbuttonpress; %Block matlab until msgbox button is pressed
0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Text Files finden Sie in Help Center und File Exchange

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by