Separation of Specific Columns from a Text File

3 visualizaciones (últimos 30 días)
Sohel Rana
Sohel Rana el 23 de Dic. de 2021
Respondida: Voss el 23 de Dic. de 2021
I don't know what is wrong in my code to select specfic column from the following data. In my data there are four columns that you can see. The text file also conatins string as well. I used the following code to selcet first column, which starts with 1460. I would appreciate your help. Thanks.
sohel=fopen('FB.txt','r');
data=textscan(sohel,'%f%f','delimiter', '\t');
rubel=fclose(sohel);
lam=smoothdata(data{1},'gaussian');
(I presume following is replicate of the file -- used code button to format so folks could copy for test... --dpb)
HW Acquisition Rate: 1000 Hz
Wavelength Tracking: 400 pm / acquistion
Data Interleave: 1
CH 1 Configuration:
Distance Compensation Enabled: False
Spectral Average Count: 1
Detect Valley: False
Detection Setting ID: 128
CH 2 Configuration:
Distance Compensation Enabled: False
Spectral Average Count: 1
Detect Valley: False
Detection Setting ID: 128
CH 3 Configuration:
Distance Compensation Enabled: False
Spectral Average Count: 1
Detect Valley: False
Detection Setting ID: 128
CH 4 Configuration:
Distance Compensation Enabled: False
Spectral Average Count: 1
Detect Valley: False
Detection Setting ID: 128
Wvl (nm) CH 1 CH 3 CH 4
1460.0000 -52.7734 -52.9736 -43.9522
1460.0080 -51.3987 -52.2463 -43.3339
1460.0160 -50.3044 -52.6952 -43.1207
1460.0240 -49.6716 -52.4275 -43.6564
1460.0320 -51.4409 -53.0774 -44.0559
1460.0400 -50.6857 -52.5140 -43.3023
1460.0480 -49.7279 -51.3204 -43.1532
1460.0560 -48.2821 -52.3089 -43.3152
1460.0640 -50.3557 -52.4843 -43.3857
1460.0720 -48.7783 -52.9036 -42.9076
1460.0800 -51.3987 -52.6301 -42.8598
  1 comentario
dpb
dpb el 23 de Dic. de 2021
data=textscan(sohel,'%f%f','delimiter', '\t');
will fail on the header lines...use the headerlines parameter to skip if known fixed number or scan the file looking for the column variable names lines if can vary.
Optionally, look into detectimportoptions and use one of the higher-level routines like readtable or readmatrix

Iniciar sesión para comentar.

Respuestas (1)

Voss
Voss el 23 de Dic. de 2021
"The text file also conatins string as well."
This is the problem. You would need to tell textscan() to skip that header text. Here is one way to do that:
(I'm attaching a file I made from copying and pasting the text from your question into a text editor. It may not be the same as your actual text file. If you have a problem running this code, upload your actual text file.)
% open the file
fid = fopen('FB.txt','r');
% read lines of text until you get to a line that starts with 'Wvl (nm)'
str = '';
while ~startsWith(str,'Wvl (nm)')
str = fgetl(fid);
end
% now get the data
data = textscan(fid,'%f');
% close the file
fclose(fid);
% reshape the data into an n-by-4 matrix
data = reshape(data{1},4,[]).';
display(data);
data = 11×4
1.0e+03 * 1.4600 -0.0528 -0.0530 -0.0440 1.4600 -0.0514 -0.0522 -0.0433 1.4600 -0.0503 -0.0527 -0.0431 1.4600 -0.0497 -0.0524 -0.0437 1.4600 -0.0514 -0.0531 -0.0441 1.4600 -0.0507 -0.0525 -0.0433 1.4600 -0.0497 -0.0513 -0.0432 1.4601 -0.0483 -0.0523 -0.0433 1.4601 -0.0504 -0.0525 -0.0434 1.4601 -0.0488 -0.0529 -0.0429
% lam = smoothdata(data(:,1),'gaussian');

Categorías

Más información sobre Text Data Preparation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by