Same code line works outside but not inside for loop.

1 次查看(过去 30 天)
评论: Rudolf ,2021-5-3
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);
text1 = string(i);
if i+1 < 10
text2 = "0" + string(i+1);
else if i+1 == 24
text2 = "00";
text2 = string(i+1);
fulltext = text1 + " - " + text2;
hourValues{i+1} = raw(any(strcmp(raw(:,2),[fulltext])>0,2),14); %<--Why don't this line work?
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 个评论
Rudolf 2021-5-3
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.



Benjamin Großmann
编辑:Benjamin Großmann 2021-5-3
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 个评论
Rudolf 2021-5-3
Thank you very much Benjamin! I didn't know about that, nice to learn.


更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by