How to apply conditional statements so as to select certain rows or columns on a given dataset.

2 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Cedric
Cedric am 3 Jul. 2014
Bearbeitet: Cedric am 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 Kommentare
Cedric
Cedric am 3 Jul. 2014
Bearbeitet: Cedric am 3 Jul. 2014
The pattern matches the following
  • as many characters as possible which are different from \r and |
Manduna Watson
Manduna Watson am 21 Jul. 2014
Using the same technique, how can I, for example,
(A): select and display data with + , 3 , and tcp only .
(B): select and add data with + , 3 , tcp and 3.0 only

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sara
Sara am 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 Kommentare
Manduna Watson
Manduna Watson am 21 Jul. 2014
Using the same technique, how can I, for example,
(A): select and display data with + , 3 , and tcp only .
(B): select and add data with + , 3 , tcp and 3.0 only

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Large Files and Big Data finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by