How to apply conditional statements so as to select certain rows or columns on a given dataset.
3 次查看(过去 30 天)
显示 更早的评论
How do I apply conditional statements so as to select certain rows or columns on a given dataset (like the one below)? For example, I would like to (1) display records with r only , (2) count records with + only .
Please note that the example of the data to be analyzed is given below. The data is separated by space. The data has 12 columns whose headings are; Event, time, from_Node, to_Node, Packet_Type, Packet_Size, Flags, Fid, Source_Address, Destination_Address, Sequence_Number and Packet_Id .
For example, + 0.155355 1 3 tcp 1500 ------- 0 0.0 3.0 2 3;
+ is an event,
0.155355 is time in secs,
1 is from_Node,
3 is to_Node,
tcp is Packet_Type, 1500 is Packet_Size,
------- are Flags,
0 is Fid,
0.0 is Source_Address,
3.0 is Destination_Address,
2 is Sequence_Number and
3 is Packet_Id.
_ _This is the data _
+ 0.155355 1 3 tcp 1500 ------- 0 0.0 3.0 2 3
- 0.160955 1 3 tcp 1500 ------- 0 0.0 3.0 2 3
r 0.170955 1 3 tcp 1500 ------- 0 0.0 3.0 1 2
r 0.178955 1 3 tcp 1500 ------- 0 0.0 3.0 2 3
+ 0.203632 1 3 tcp 1500 ------- 0 0.0 3.0 3 6
- 0.203632 1 3 tcp 1500 ------- 0 0.0 3.0 3 6
+ 0.206032 1 3 tcp 1500 ------- 0 0.0 3.0 4 7
+ 0.211632 1 3 tcp 1500 ------- 0 0.0 3.0 5 8
Thank you
采纳的回答
Cedric
2014-7-3
编辑:Cedric
2014-7-4
Here is another approach
content = fileread( 'myData.txt' ) ;
nPlus = sum( content == '+' ) ;
rRows = regexp( content, '(?<=(^|\n)r )[^\r\n]*', 'match' ) ;
with that you get
>> nPlus
nPlus =
4
and
>> fprintf( '%s\n', rRows{:} ) ;
0.170955 1 3 tcp 1500 ------- 0 0.0 3.0 1 2
0.178955 1 3 tcp 1500 ------- 0 0.0 3.0 2 3
PS: I can explain the regexp pattern if anyone is interested. Just let me know.
EDIT: I slightly modified the call to regexp to manage cases with/without header.
3 个评论
更多回答(1 个)
Sara
2014-7-3
clc
clearvars
% Read file
filecontent = cell(1000,1);
k = 0;
fid = fopen('mydata.txt','r');
while 1
t = fgetl(fid);
if(~ischar(t)),break,end
k = k + 1;
filecontent{k} = t;
end
filecontent = filecontent(1:k);
fclose(fid);
% To get only the first character
fid = fopen('mydata.txt','r');
t = textscan(fid,'%s%*[^\n]');t = t{1};
fclose(fid);
% r data
index_r = find(strcmp(t,'r')==1);
filecontent(index_r)
% + data
index_plus = find(strcmp(t,'+')==1);
numel(index_plus)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!