textscan fopen

27 vues (au cours des 30 derniers jours)
Tiina
Tiina le 4 Jan 2012
I have a file to open which looks as follows
row1: '#CIR,Date[L],Time[L],Type,Clr Dir.'
then a list of
rows 'AXY.P,20050101,09:35:01.202,quant,^'
I used fid=fopen('location of the file …) textscan(fid, ' …%s %f combinations …. yet couldn;t get out what I wanted in an output
I wish to have 5 columns as shown by the delimiter ',' and convert the last column sign^ to a number say 1. Ultimately it would look like
AXY.P 20050101 09:35:01.202, quant, 1
Any help is appreciated.

Réponses (4)

Friedrich
Friedrich le 4 Jan 2012
Hi,
I created a file (data.txt) which contains the following lines
AXY.P,20050101,09:35:01.202,quant,^
AXY.P,20050101,09:35:01.202,quant,^
AXY.P,20050101,09:35:01.202,quant,^
You can get this data into MATLAB like this:
fid = fopen('data.txt','r');
data = textscan(fid,'%s%s%s%s%s','delimiter',',');
fclose(fid);
celldisp(data)
So convert the ^ to the number 4:
data{5} = num2cell(4*ones(size(data{5})));
celldisp(data)
  2 commentaires
Tiina
Tiina le 5 Jan 2012
Hi,
with respect to the column containing character ^ (and some letters) num2cell may impose a value rather than convert or assign a number for characters and/or letters. if I use data.txt as created in the answer and I make an adjustment it may clarify the question more
AXY.P,20050101,09:35:01.202,quant,^
AXY.P,20050101,09:35:01.202,quant,w
AXY.P,20050101,09:35:01.202,quant,q
AXY.P,20050101,09:35:01.202,quant,^
then the char in the end would be in a col like
1
2
3
1
Tiina
Walter Roberson
Walter Roberson le 5 Jan 2012
Use the three-output form of unique() and use the third output as the column value.

Connectez-vous pour commenter.


TAB
TAB le 5 Jan 2012
Considering the content of file are as
AXY.P,20050101,09:35:01.202,quant,^
AXY.P,20050101,09:35:01.202,quant,w
AXY.P,20050101,09:35:01.202,quant,q
AXY.P,20050101,09:35:01.202,quant,^
-------------------------------------------------------
SymbolTable={'^','w','q'};
NumTable =[1 ,2 ,3];
fid = fopen('data.txt');
data = textscan(fid,'%s%s%s%s%s','delimiter',',');
for k=1:length(data{5})
data{5}(k)=num2cell(NumTable(strcmp(SymbolTable,data{5}(k))==1));
end
fclose(fid);

Tiina
Tiina le 5 Jan 2012
strfind() .... did the trick, thanks for your input as well

yair suari
yair suari le 5 Jan 2012
it looks like you want to use csvread

Community Treasure Hunt

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

Start Hunting!

Translated by