Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用matlab搜索excel数据文件中的时间范围,并将数据复制到变量中_Excel_Matlab_Datetime_Xlsread - Fatal编程技术网

使用matlab搜索excel数据文件中的时间范围,并将数据复制到变量中

使用matlab搜索excel数据文件中的时间范围,并将数据复制到变量中,excel,matlab,datetime,xlsread,Excel,Matlab,Datetime,Xlsread,在我的excel文件中,我有一个12小时时钟时间的时间列和一组数据列。我在这篇文章中粘贴了一段代码,因为我不能附加文件。我正在尝试构建一个gui,它将接受用户的输入,如下所示: 开始时间:上午7:29:32 结束时间:上午7:29:51 然后执行以下操作: 以秒为单位计算经过的时间(应该只是行计数,数据每秒收集一次) 将“数据3”列中时间范围内的数据复制到变量中。根据需要对复制的数据执行其他计算 由于时间数据是用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”字符串。