How to apply conditional statements so as to select certain rows or columns on a given dataset.
1 view (last 30 days)
Show older comments
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
Accepted Answer
Cedric
on 3 Jul 2014
Edited: Cedric
on 4 Jul 2014
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 Comments
More Answers (1)
Sara
on 3 Jul 2014
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)
5 Comments
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!