Arrays 如何将文件中的数据逐一读入matlab
我有一个这样的文件:Arrays 如何将文件中的数据逐一读入matlab,arrays,matlab,file,input,line,Arrays,Matlab,File,Input,Line,我有一个这样的文件: PoreCount= 9 ThroatCount= 10 0 1.16667 -0.666667 0 1 1.16667 -0.333333 0 2 1.16667 0 0 3 1.5 -0.666667 0 4 1.5 -0.333333 0 5 1.5 0 0 6 1.83333 -0.666667 0 7 1.83333 -0.333333 0
PoreCount= 9
ThroatCount= 10
0 1.16667 -0.666667 0
1 1.16667 -0.333333 0
2 1.16667 0 0
3 1.5 -0.666667 0
4 1.5 -0.333333 0
5 1.5 0 0
6 1.83333 -0.666667 0
7 1.83333 -0.333333 0
8 1.83333 0 0
0 0 1 0.0610206 0.333333 0
1 0 3 0.0606029 0.333333 0
2 1 2 0.0601841 0.333333 0
3 1 4 0.0612494 0.333333 0
4 3 4 0.0593242 0.333333 0
5 3 6 0.0589063 0.333333 0
6 4 5 0.0599607 0.333333 0
7 4 7 0.0595583 0.333333 0
8 6 7 0.0591209 0.333333 0
9 7 8 0.0601974 0.333333 0
你可以看到:
这里有两种物体,P和T。
有9个P和10个T。
关于P、1个整数和3个浮点数有4种信息。
关于T有6种信息,3个整数和3个浮点数
现在我需要matlab程序知道有多少个p和T,然后把关于p的各种信息读入一维数组,把关于T的各种信息读入一维数组
因此将有4列数组来存储p信息。和6列数组来存储T信息
根据我的知识,我编写了以下程序。它不起作用,不用说。请帮帮我
prompt = 'Please enter the file name: ';
FileName = input(prompt, 's');
SaturationFile=fopen(FileName);
PoreCount =fscanf(SaturationFile, 'PoreCount = %d\n', 1);
ThroatCount=fscanf(SaturationFile, 'ThroatCount= %d\n', 1);
% P =fscanf(SaturationFile, '%d%f%f%f\n', PoreCount);
% P=zeros(4, 1);
PI=zeros(PoreCount, 1);
PX=zeros(PoreCount, 1);
PY=zeros(PoreCount, 1);
PS=zeros(PoreCount, 1);
% T =fscanf(SaturationFile, '%f', [ThroatCount, 6]);
TI=zeros(ThroatCount, 1);
Tb=zeros(ThroatCount, 1);
Te=zeros(ThroatCount, 1);
TA=zeros(ThroatCount, 1);
TL=zeros(ThroatCount, 1);
TS=zeros(ThroatCount, 1);
for i=1:PoreCount
% P=fscanf(SaturationFile, '%d');
% PI(i)=P(i, 1);
% PX(i)=P(i, 2);
% PY(i)=P(i, 3);
% PS(i)=P(i, 4);
PI(i)=fscanf(SaturationFile, '%d' , 1);
PX(i)=fscanf(SaturationFile, '%f' , 1);
PY(i)=fscanf(SaturationFile, '%f' , 1);
PS(i)=fscanf(SaturationFile, '%d\n', 1);
end
for i=1:ThroatCount
TI(i)=fscanf(SaturationFile, '%d' , 1);
Tb(i)=fscanf(SaturationFile, '%d' , 1);
Te(i)=fscanf(SaturationFile, '%d' , 1);
TA(i)=fscanf(SaturationFile, '%f' , 1);
TL(i)=fscanf(SaturationFile, '%f' , 1);
TS(i)=fscanf(SaturationFile, '%d\n', 1);
end
错误消息:
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in NetworkSaturationPlot (line 29)
PI(i)=fscanf(SaturationFile, '%d' , 1);
我能够得到两个结构Ttmp和Ptmp,它们是1D单元数组,每个单元数组包含来自单个列的数据。然后将这些单元阵列转换为规则向量
clear all;close all;clc
SaturationFile=fopen('./data.txt');
PoreCount =fscanf(SaturationFile, 'PoreCount = %d\n', 1);
ThroatCount=fscanf(SaturationFile, 'ThroatCount= %d\n', 1);
Ptmp=textscan(SaturationFile,'%u %f %f %u',PoreCount);
Ttmp=textscan(SaturationFile,'%u %u %u %f %f %d',ThroatCount);
PI=Ptmp{1};
PX=Ptmp{2};
PY=Ptmp{3};
PS=Ptmp{4};
TI=Ttmp{1};
TB=Ttmp{2};
TE=Ttmp{3};
TL=Ttmp{4};
TA=Ttmp{5};
TS=Ttmp{6};
fclose(SaturationFile);
你说“不行”是什么意思?如果它产生错误,请将您的问题包含在错误中。谢谢,我添加了错误消息,我不理解为什么PI(I),标量会有维度问题P=textscan(…),并将其读入单元格矩阵,但我不能使用cell2mat,因为它需要矩阵内容是相同的类型,所以另一个选项是获取textscan的输出,并在for循环中获取P和T(在每个元素)的内容,然后将它们放入数组中。这有意义吗?我相信逐条阅读是一个更好的选择。但如何做到这一点呢?听着,事实上,我想一个接一个地读。但是我的语法似乎不合适。我已经编辑了答案,以包含创建阵列P&T的循环,请告诉我这是否是您正在寻找的汉克斯!这一个得到错误:下标赋值维度不匹配。NetworkSaturationPlot(第11行)中的错误PI(jj,:)=Ptmp{jj};我不知道这句话是怎么说的!我检查了数据,Ptmp在4个单元格中读取,每个单元格是列向量,Ttmp在6个单元格中读取,每个单元格也是列向量。现在我需要做的是把每个单元格放到一个单独的列向量中。例如,PI-PX-PY-PS表示孔隙,TI-TB-TE-TL-TA-TS表示喉道