Importing data from a file in a specific way

2 次查看(过去 30 天)
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 个评论
g
g 2019-3-17
编辑:g 2019-3-17
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 2019-3-17
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.

更多回答(1 个)

Guillaume
Guillaume 2019-3-17
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