使用matlab搜索excel数据文件中的时间范围,并将数据复制到变量中
在我的excel文件中,我有一个12小时时钟时间的时间列和一组数据列。我在这篇文章中粘贴了一段代码,因为我不能附加文件。我正在尝试构建一个gui,它将接受用户的输入,如下所示: 开始时间:上午7:29:32 结束时间:上午7:29:51 然后执行以下操作: 以秒为单位计算经过的时间(应该只是行计数,数据每秒收集一次) 将“数据3”列中时间范围内的数据复制到变量中。根据需要对复制的数据执行其他计算 由于时间数据是用xlsread作为文本导入的,所以我很难确定如何搜索时间数据并找到它的位置。有什么想法吗 数据如下所示:使用matlab搜索excel数据文件中的时间范围,并将数据复制到变量中,excel,matlab,datetime,xlsread,Excel,Matlab,Datetime,Xlsread,在我的excel文件中,我有一个12小时时钟时间的时间列和一组数据列。我在这篇文章中粘贴了一段代码,因为我不能附加文件。我正在尝试构建一个gui,它将接受用户的输入,如下所示: 开始时间:上午7:29:32 结束时间:上午7:29:51 然后执行以下操作: 以秒为单位计算经过的时间(应该只是行计数,数据每秒收集一次) 将“数据3”列中时间范围内的数据复制到变量中。根据需要对复制的数据执行其他计算 由于时间数据是用xlsread作为文本导入的,所以我很难确定如何搜索时间数据并找到它的位置。有什么想
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
这是我正在使用的代码:
[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],:);
您可能需要:
- 使用
在导入的数据中查找相关字符串strfind
- 使用
将日期转换为序列日期号,以便能够计算两点之间经过的时间datenum
[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
使用主菜单中变量标记的“导入数据”。在那里,您可以设置导入数据的方式。有或没有标题和格式 从开始将时间字符串和用户输入转换为数值。我将它们保留为字符串,只找到了它们的行号。如果我从该值中减去一,它将在数据列中为我提供正确的数据点,因为我的xlsread数据矩阵中缺少文本标题,所以所有符号都上移了一位。我想我知道现在使用strfind应该做些什么:下面是我所做的:
IndexText=strfind(text,'7:29:29')
后跟Index=find(not(cellfun('isempty',indextextext)))
这给了我该时间戳的行号。我该怎么做,然后告诉matlab从数据集的值中选择第3列中的行号?然后告诉它选择结束时间的范围,该范围存储为另一个行号索引变量?我想我也算出了其他部分。我做到了dataspan=data([IndexStart:IndexEnd],:)
其中IndexStart和IndexEnd是我的开始和停止时间行数。我所做的是最好的方法吗?如果你想让我们进一步帮助你,你真的需要发布你的代码。代码仍然很简单,但我需要它做的是:[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],:)
所以我需要对15段数据执行此操作,是否有方法告诉它循环每个开始/结束跨度的时间列表,而不只是复制粘贴相同的3行15次?基本上,我在gui上有30个框用于输入开始和结束时间的字符串,用户使用此表格格式上载数据文件,然后点击go,它会筛选这15个段的数据,对它们进行一些计算,可能会弹出一个带有一些标签的图形。所以我基本上打算用gui脚本中的get.handles…等替换stratch中的“2:30:29 PM”字符串。