Same code line works outside but not inside for loop.

1 Ansicht (letzte 30 Tage)
Rudolf
Rudolf am 3 Mai 2021
Kommentiert: Rudolf am 3 Mai 2021
I have a code which i don't understand why acts differently outside compared to inside a for loop.
With this code:
filename = ('elspot-prices_2019_hourly_nok – Kopi.xlsx');
[~,~,raw] = xlsread(filename);
hourValues{1} = raw(any(strcmp(raw(:,2),["00 - 01"])>0,2),14);
hourValues{2} = raw(any(strcmp(raw(:,2),["01 - 02"])>0,2),14);
hourValues{3} = raw(any(strcmp(raw(:,2),["02 - 03"])>0,2),14);
I'll get the result: hourValues 1x3 cell, where each cell have an array of hour values.
I need this for 24 hours, so a loop would be great. But when like this:
for i=0:23
if i < 10
text1 = "0" + string(i);
else
text1 = string(i);
end
if i+1 < 10
text2 = "0" + string(i+1);
else if i+1 == 24
text2 = "00";
else
text2 = string(i+1);
end
end
fulltext = text1 + " - " + text2;
hourValues{i+1} = raw(any(strcmp(raw(:,2),[fulltext])>0,2),14); %<--Why don't this line work?
end
i'll get: hourValues 1x24 cell which all is empty. Just showing [] in each of the cells.
(I've tried all kinds of combination for variabel fulltext, with and without [ ], and also both as string or char.)
Any idea why this don't work?
(Edit: xlsx file added)
  5 Kommentare
Rudolf
Rudolf am 3 Mai 2021
Now file is included. :)
I like your code Scott, but for some reason i get a string from the if-else statement, while a char from your code. Maybe string/char both works for all purposes anyway so i shouldn't pay attention to that?
Rudolf
Rudolf am 3 Mai 2021
Thanks for reply Scott and dpb.
@dpb Will see if i can learn how to convert to datetime and use readtable. It sounds more convenient.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Benjamin Großmann
Benjamin Großmann am 3 Mai 2021
Bearbeitet: Benjamin Großmann am 3 Mai 2021
The problem is, that the xlsx file contains protected spaces ( char(160) ) and you are comparing to normal spaces.
Quick and very dirty solution is:
fulltext = text1 + char(160) + "-" + char(160) + text2;
hourValues{i+1} = raw(any(strcmp(raw(:,2),[fulltext])>0,2),14); % should work now
@dpb mentions it in the comments and I would recommend it too: Use readtable and convert your xlsx data to datetime.
  1 Kommentar
Rudolf
Rudolf am 3 Mai 2021
Thank you very much Benjamin! I didn't know about that, nice to learn.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Characters and Strings 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!

Translated by