Importing data from a file in a specific way

1 visualizzazione (ultimi 30 giorni)
I have a file with 3 columns of data.
Here is just a sample of what the data looks like (there are many more rows):
265.54555556 1.09773e-46 1.04772e-23
265.54611111 3.60808e-47 6.00673e-24
265.54666667 1.25291e-46 1.11934e-23
I want to read this into Matlab (with the numbers formatted with the same precision) and be able to work with specific columns. This is what I have. I'm not sure what is going wrong or if I even am reading in the numbers properly for their values.
fileID = fopen(file,'r');
formatSpec='%f %12.5e %12.5e';
sizeA = [Inf 3];
A = fscan(fileID,formatSpec,sizeA);
disp(A);
Additionally, once I have this working, how would I select a specific column?
Thanks!
  3 Commenti
g
g il 17 Mar 2019
Modificato: g il 17 Mar 2019
There is no specific reason, I suppose. I was just trying to avoid those very small numbers being interpreted as 0.0000 for instance- I want them to keep their values on the order of 10^-46, etc. I don't believe I'm working with fixed width.
Walter Roberson
Walter Roberson il 17 Mar 2019
%f knows about exponential format.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 17 Mar 2019
fileID = fopen(file, 'r');
formatSPec = '%f %f %f';
sizeA = [3 Inf]; %notice not [Inf 3]
A = fscanf(fileID, formatSpec, sizeA) .'; %notice transpose
fclose(fileID);
Or
A = cell2mat( textscan( fileread(file), '%f %f %f') );
And afterwards, A(:,2) would be the second column.

Più risposte (1)

Guillaume
Guillaume il 17 Mar 2019
The numbers in your text file have less precision than matlab uses. So, the simplest thing is to load them with csvread (or dlmread):
data = csvread(file);
Note that the precision with which matlab displays the numbers is completely different to the precision at which they're stored. Use format to change the display precision.

Community Treasure Hunt

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

Start Hunting!

Translated by