Search code examples
excelmatlabdatetimexlsread

Use matlab to search excel data file for time range and copy data into variable


In my excel file I have a time column in 12 hr clock time and a bunch of data columns. I have pasted a snippet of it in this post as a code since i cant attach a file. I am trying to build a gui that will take an input from the user like so:

start time: 7:29:32 AM

End time: 7:29:51 AM

Then do the following:

calculate the time that has passed in seconds (should be just a row count, data is gathered once a second)

copy the data in the time range from the "Data 3" column in to a variable perform other calculations on the data copied as needed

I am having some trouble figuring out what to do to search the time data and find its location since it imports as text with xlsread. any ideas?

The data looks like this:

Time        Data 1      Data 2      Data 3      Data 4      Data 5
7:29:25 AM  0.878556385 0.388400561 0.076890401 0.93335277  0.884750618
7:29:26 AM  0.695838393 0.712762566 0.014814069 0.81264949  0.450303694
7:29:27 AM  0.250846937 0.508617941 0.24802015  0.722457624 0.47119616
7:29:28 AM  0.206189924 0.82970364  0.819163787 0.060932817 0.73455323
7:29:29 AM  0.161844331 0.768214077 0.154097877 0.988201094 0.951520263
7:29:30 AM  0.704242494 0.371877481 0.944482485 0.79207359  0.57390951
7:29:31 AM  0.072028024 0.120263127 0.577396985 0.694153791 0.341824004
7:29:32 AM  0.241817775 0.32573323  0.484644494 0.377938298 0.090122672
7:29:33 AM  0.500962945 0.540808907 0.582958676 0.043377373 0.041274613
7:29:34 AM  0.087742217 0.596508236 0.020250297 0.926901109 0.45960323
7:29:35 AM  0.268222071 0.291034947 0.598887588 0.575571111 0.136424853
7:29:36 AM  0.42880255  0.349597405 0.936733938 0.232128788 0.555528823
7:29:37 AM  0.380425154 0.162002488 0.208550466 0.776866494 0.79340504
7:29:38 AM  0.727940393 0.622546124 0.716007768 0.660480612 0.02463804
7:29:39 AM  0.582772435 0.713406643 0.306544291 0.225257421 0.043552277
7:29:40 AM  0.371156954 0.163821476 0.780515577 0.032460418 0.356949005
7:29:42 AM  0.484167263 0.377878242 0.044189636 0.718147456 0.603177625
7:29:43 AM  0.294017186 0.463360581 0.962296024 0.504029061 0.183131098
7:29:44 AM  0.95635086  0.367849494 0.362230918 0.984421096 0.41587606
7:29:45 AM  0.198645523 0.754955312 0.280338922 0.79706146  0.730373691
7:29:46 AM  0.058483961 0.46774544  0.86783339  0.147418954 0.941713252
7:29:47 AM  0.411193343 0.340857813 0.162066261 0.943124515 0.722124394
7:29:48 AM  0.389312994 0.129281042 0.732723258 0.803458815 0.045824426
7:29:49 AM  0.549633038 0.73956852  0.542532728 0.618321989 0.358525184
7:29:50 AM  0.269925317 0.501399748 0.938234302 0.997577871 0.318813506
7:29:51 AM  0.798825842 0.24038537  0.958224157 0.660124357 0.07469288
7:29:52 AM  0.963581196 0.390150081 0.077448543 0.294604314 0.903519943
7:29:53 AM  0.890540963 0.50284339  0.229976565 0.664538451 0.926438543
7:29:54 AM  0.46951573  0.192568637 0.506730373 0.060557482 0.922857391
7:29:55 AM  0.56552394  0.952136998 0.739438663 0.107518765 0.911045415
7:29:56 AM  0.433149875 0.957190309 0.475811126 0.855705733 0.942255155

and this is the code I am using:

[Data,Text] = xlsread('C:\Users\data.xlsx',2); 
IndexStart=strmatch('7:29:29 AM',Text,'exact');   %start time 
IndexEnd=strmatch('2:30:29 PM',Text,'exact');     %end time 
seconds = IndexEnd-IndexStart; 
TestData = Data([IndexStart: IndexEnd],:);

Solution

  • You probably need to:

    • Use strfind to find the relevant string in the data imported
    • Use datenum to convert the date to serial date numbers, to be able to calculate the elapsed time between the two points.

    It would help if you posted your code so far though.

    EDIT based on comments:

    Here's what I would do for cycling through the list of start and end times:

    [Data,Text] = xlsread('C:\Users\data.xlsx',2); 
    start_times = {'7:29:29 AM','7:29:35 AM','7:29:44 AM','7:29:49 AM'}; % etc...
    end_times = {'2:30:29 PM','2:30:59 PM','2:31:22 PM','2:32:49 PM'}; % etc...
    elapsed_time = zeros(length(start_times),1);
    TestData = cell(length(start_times),1); % need a cell array because data can/will be of unequal lengths
    for k=1:length(start_times)
        IndexStart=strmatch(start_times{k},Text,'exact');   %start time 
        IndexEnd=strmatch(end_times{k},Text,'exact');     %end time 
        elapsed_time(k) = IndexEnd-IndexStart; 
        TestData{k} = Data([IndexStart: IndexEnd],:);
    end