How to apply conditional statements so as to select certain rows or columns on a given dataset.
11 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Manduna Watson
le 3 Juil 2014
Commenté : Manduna Watson
le 21 Juil 2014
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
Réponse acceptée
Cedric
le 3 Juil 2014
Modifié(e) : Cedric
le 4 Juil 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 commentaires
Plus de réponses (1)
Sara
le 3 Juil 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 commentaires
Voir également
Catégories
En savoir plus sur Characters and Strings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!