有关数据读入matlab
时间:10-02
整理:3721RD
点击:
前些日子在论坛见不少人都对读入数据有些迷茫
cst、hfss的数据基本格式是描述性语言+数据的格式
下面是一个cst的数据输出
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
5 0.4557996
5.029 0.4553181
5.058 0.4547905
5.087 0.4542164
5.116 0.4535954
5.145 0.452927
5.174 0.4522107
5.203 0.4514461
但是matlab没有这么高的领悟了,不会自己读数据
方案不少说一说常用的。
1自己手动删除
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
然后使用
load (文件名).txt
不错的方法,如果你文件名是纯数字的,比如是24,在matlab的workspace中会有一个X24的数组。
下面对x24处理就是了。
2一些人比较懒,不愿意删东西
可以这样:
[f,tr]=textread('24.txt','%f%f',2);
先到上面在看一下cst的数据结构,这里的2 是说从第3行开始读数。
如果你的数据是大于两列的,有几列,在[a1,a2,a3……]就是几个向量,同时,"%f%f……"中的%f的个数和前面的列向量的个数相同。
3有些时候仪器的输出比较牛,我们的古董级别的失网的输出是csv格式的带编码的数据。
# Version 1.00
#
freq[Hz];re:Trc1_b2d1sam[V];im:Trc1_b2d1sam[V];
1.700000000000000E+011;7.317389423714706E-003;-3.586198237922638E-003;
1.701500000000000E+011;-8.718488268764849E-003;5.495278251522440E-003;
1.703000000000000E+011;-1.050072140670953E-002;3.472822925688487E-003;
可以这么处理
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');% open file
i=0;
while 1 %get the length of the data
tline = fgetl(fid);
if ischar(tline), break, end
i=i+1;
end
fclose(fid); %the array can't go back, when it get the bottom of the file. so open the file again
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');
temp=fgetl(fid); % due to the structure of the data, first three line is useless.
temp=fgetl(fid);
temp=fgetl(fid);
for j=1:1:i-3 %read the data
temp=fgetl(fid);
a=strrep(temp,';',' '); % use the 'table' to replace ';'
[b,c]=strtok(a);
[e,f]=strtok(c);
data(j,1)=str2double(b);
data(j,2)=str2double(e);
data(j,3)=str2double(f);
end
4事实上,我们的数据量比较大,可以一次打开多个文件
clc
close all
clear all
t1=27;
t2=30;
for t=t1:1:t2
f=strcat(num2str(t),'.cvs');
g='C:\Documents and Settings\Administrator\My Documents\04.13\';
fid=fopen(strcat(g,f),'r+');
t1,t2可以自己指定。因为实验数据是要测60次取均值的,导师一直是这么要求的。如果让你删60个文件的说明的话,会发疯的。
5上面的这些都是对不会使用dos的人写的
如果你会使dos,十分简单,写一个批处理文件,在matlab的m文件的一开始执行一下
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
5 0.4557996
5.029 0.4553181
5.058 0.4547905
马上全部变成
5 0.4557996
5.029 0.4553181
5.058 0.4547905
现在我们的实验室都是在用批处理的方式来写的,因为数据太多了。
先写到这里了,希望对大家数据处理有帮助。
cst、hfss的数据基本格式是描述性语言+数据的格式
下面是一个cst的数据输出
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
5 0.4557996
5.029 0.4553181
5.058 0.4547905
5.087 0.4542164
5.116 0.4535954
5.145 0.452927
5.174 0.4522107
5.203 0.4514461
但是matlab没有这么高的领悟了,不会自己读数据
方案不少说一说常用的。
1自己手动删除
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
然后使用
load (文件名).txt
不错的方法,如果你文件名是纯数字的,比如是24,在matlab的workspace中会有一个X24的数组。
下面对x24处理就是了。
2一些人比较懒,不愿意删东西
可以这样:
[f,tr]=textread('24.txt','%f%f',2);
先到上面在看一下cst的数据结构,这里的2 是说从第3行开始读数。
如果你的数据是大于两列的,有几列,在[a1,a2,a3……]就是几个向量,同时,"%f%f……"中的%f的个数和前面的列向量的个数相同。
3有些时候仪器的输出比较牛,我们的古董级别的失网的输出是csv格式的带编码的数据。
# Version 1.00
#
freq[Hz];re:Trc1_b2d1sam[V];im:Trc1_b2d1sam[V];
1.700000000000000E+011;7.317389423714706E-003;-3.586198237922638E-003;
1.701500000000000E+011;-8.718488268764849E-003;5.495278251522440E-003;
1.703000000000000E+011;-1.050072140670953E-002;3.472822925688487E-003;
可以这么处理
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');% open file
i=0;
while 1 %get the length of the data
tline = fgetl(fid);
if ischar(tline), break, end
i=i+1;
end
fclose(fid); %the array can't go back, when it get the bottom of the file. so open the file again
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');
temp=fgetl(fid); % due to the structure of the data, first three line is useless.
temp=fgetl(fid);
temp=fgetl(fid);
for j=1:1:i-3 %read the data
temp=fgetl(fid);
a=strrep(temp,';',' '); % use the 'table' to replace ';'
[b,c]=strtok(a);
[e,f]=strtok(c);
data(j,1)=str2double(b);
data(j,2)=str2double(e);
data(j,3)=str2double(f);
end
4事实上,我们的数据量比较大,可以一次打开多个文件
clc
close all
clear all
t1=27;
t2=30;
for t=t1:1:t2
f=strcat(num2str(t),'.cvs');
g='C:\Documents and Settings\Administrator\My Documents\04.13\';
fid=fopen(strcat(g,f),'r+');
t1,t2可以自己指定。因为实验数据是要测60次取均值的,导师一直是这么要求的。如果让你删60个文件的说明的话,会发疯的。
5上面的这些都是对不会使用dos的人写的
如果你会使dos,十分简单,写一个批处理文件,在matlab的m文件的一开始执行一下
Frequency / GHz SZmin(1),Zmin(1)/abs,linear
-----------------------------------------------------------------
5 0.4557996
5.029 0.4553181
5.058 0.4547905
马上全部变成
5 0.4557996
5.029 0.4553181
5.058 0.4547905
现在我们的实验室都是在用批处理的方式来写的,因为数据太多了。
先写到这里了,希望对大家数据处理有帮助。
不错,多谢小编奉献
貌似用matlab直接处理不是那么简单,lz的第二个方法好像不行
可以的啊,在我的机器运行的很正常。要不你把数据给我,我帮你写一个m文件?
谢谢了!