Drug_time 2 First_start 1 First_end 10 Second_start 11 Second_end 20 Bloodloss_time 3 First_start 21 First_end 30 Second_start 31 Second_end 40 Third_start 41 Third_end 50 TXT文档内容如上面所示
时间: 2024-03-02 19:48:47 浏览: 83
谢谢提供的信息。根据这个信息,可以使用类似于之前的代码将原始数据转换为一个结构体数组,然后根据这个结构体数组进行数据截取。代码如下:
```matlab
% 读取文本文件内容
fileID = fopen('data.txt','r');
formatSpec = '%s %s %d %s %d';
data = textscan(fileID, formatSpec, 'Delimiter', ' ');
fclose(fileID);
% 构建数据库
num_events = length(data{1});
db = struct();
j = 1;
for i = 1:num_events
if strcmp(data{1}{i}, 'Drug_time')
db(j).type = 'Drug';
db(j).time = data{2};
db(j).start_time = data{3};
db(j).end_time = data{5};
db(j+1).type = 'Drug';
db(j+1).time = data{2};
db(j+1).start_time = data{6};
db(j+1).end_time = data{7};
j = j + 2;
elseif strcmp(data{1}{i}, 'Bloodloss_time')
db(j).type = 'Bloodloss';
db(j).time = data{2};
db(j).start_time = data{3};
db(j).end_time = data{5};
db(j+1).type = 'Bloodloss';
db(j+1).time = data{2};
db(j+1).start_time = data{6};
db(j+1).end_time = data{7};
db(j+2).type = 'Bloodloss';
db(j+2).time = data{2};
db(j+2).start_time = data{8};
db(j+2).end_time = data{9};
j = j + 3;
end
end
% 读取原始数据
data = load('data.mat');
% 遍历数据库,截取数据
for i = 1:length(db)
type = db(i).type;
start_time = datetime(data.start_time(db(i).time), 'InputFormat', 'HH:mm:ss');
end_time = datetime(data.end_time(db(i).time), 'InputFormat', 'HH:mm:ss');
segment_name = [type, '_', num2str(db(i).time), '_', num2str(db(i).start_time), '_', num2str(db(i).end_time), '_segment'];
segment_data = data.data(data.time >= start_time & data.time <= end_time, :);
assignin('base', segment_name, segment_data);
end
```
这段代码会将原始数据`data`按照数据库中的每一次失血或打药进行截取,并将截取到的数据保存在一个变量中。`assignin('base', segment_name, segment_data)`这一行代码会将截取到的数据保存在工作空间中,变量名为`segment_name`。例如,对于第一次打药,开始时间为1,结束时间为10,截取到的数据会被保存在变量`Drug_2_1_10_segment`中。
需要注意的是,在构建数据库时,需要根据文本文件的具体格式进行调整,以确保能够正确地将信息转换为结构体数组。
阅读全文