阅读一个csv文件

5视图(30天)
科迪莉亚大卫
科迪莉亚大卫 2019年4月16日
你好Matlab社区!我在Matlab发出召唤,我得到一个项目来完成。再走几步,但现在我有点困在一个特定的部分。我想读变量和它们的值从一个简单易读的csv文件。它需要容易阅读和改变,因为人们将会改变值。这就是csv文件包含:
轨道输入变量、价值观、单位
海拔841公里
OrbitalType 0
DesiredStaticGSD, 500,
ForwardMotionCompensationFactor 1
DetectorSpatialChannels, 2800,
FNumberTelescope 1#
RadiusEarth、6378100 m
我将在我的代码中使用其他类似的csv文件。我现在的代码是这样的:
T = readtable (“OrbitalInputs.csv”,“HeaderLines”0,“ReadVariableNames”,真正的);
显示(T);
MyStruct。评论=“这是我的输入变量”;
数= 1:尺寸(T) 1)
一个= table2cell (T(计数,1));
B = table2cell (T(统计,2));
MyStruct。({1}) = B {1};
结束
但是我发现这个代码有点混乱,圆形。有没有更简单的方法做同样的事情在一个更简单的代码吗?或者更直接?
我也试图从csv文件导入的变量并分配这些变量对其他变量的值在不同的代码,这样我可以使用它们在某些计算。有什么具体的方法或任何建议我如何?
谢谢你!

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2019年4月16日
T = readtable (“OrbitalInputs.csv”,“HeaderLines”0,“ReadVariableNames”,真正的);
MyStruct = cell2struct (num2cell (t (2))、t (1));
MyStruct。评论=“这是我的输入变量”;
但是请注意,这将把去年在备注字段结构,不是第一次。
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年4月18日
你遇到一个csv文件,一个空的第一个条目在直线上,但更多的数据。它可能是一个空的第一项后跟一个数字,例如
DetectorSpatialChannels, 2800,
,2830,
,2850,
FNumberTelecope 1#
或者它可能有一个空行出于某些原因,例如
DetectorSpatialChannels, 2800,
FNumberTelescope 1#
安排会导致空字符串在第一列的信噪比
如果是第二种情况下,你只有一个空行,然后你可以调整使用
掩码= ~ cellfun (@isempty,信噪比(1));
SNRInputs = cell2struct (num2cell(信噪比{面具,2}),信噪比{面具,1});
但如果是第一种情况,有一个隐含的延续字段名称,存储一个向量的意图的结果,
DetectorSpatialChannels = (2800、2830、2850);
那需要更多的工作来处理。

登录置评。

更多的答案(2)

dpb
dpb 2019年4月16日
你开始w / readtable 路线……但是,一旦你得到了表,然后使用变量,不创造新的,特别是那些不可思议的名字对于他们的目的……
> >美国落基山地区= readtable (“cordelia.csv”,“ReadRowNames”1);%读取文件表w /变量如行ID
> > tOrbit.Units =分类(tOrbit.Units)%单位转换为一个类别变量
美国落基山地区=
7×2表
单位
_____________________
高度841年公里
OrbitalType0<定义>
DesiredStaticGSD500年<定义>
ForwardMotionCompensationFactor1<定义>
DetectorSpatialChannels2800年<定义>
FNumberTelescope1#
RadiusEarth6.3781 e + 06
> >美国落基山地区(“RadiusEarth”:)%访问所有给定的行——另一个表中
ans =
1×2表
单位
_______________
RadiusEarth6.3781 e + 06
> >美国落基山地区(“RadiusEarth”,“值”)%访问一个变量——也返回一个表
ans =
__________
RadiusEarth6.3781 e + 06
> >美国落基山地区{“RadiusEarth”,“值”}%废弃底层数据类型用{}
ans =
6378100
> >
一个替代的办法虽然单位字段类似化合物的努力是使文件的形式,它可以作为一个m文件执行(或文本读取和解释)通过编写Matlab数据行有效作业。这确实需要更多的纪律在用户确保确实有效的代码可能是太多的期望/需求。
其他例程传递数据,使用参数列表和函数传递数据,然后调用例程可以使用任何调用函数的名称有独立据实际名称;只需要有一个界面程序/函数定义。
2的评论
科迪莉亚大卫
科迪莉亚大卫 2019年4月18日
你好,我收到这个项目的大部分工作,我很高兴。不幸的是,我得到一个错误Readcsv:
错误使用cell2struct
名字必须非空字符向量或一个字符串标量。
错误在Readcsv(第18行)
SNRInputs = cell2struct (num2cell(信噪比(2)),信噪比(1));
并且我不知道如何解决这个问题或者是什么导致错误。什么好主意吗?

登录置评。


杰里米·休斯
杰里米·休斯 2019年4月16日
很难说不知道你会做什么数据,但我推荐表直接使用,除非你需要不同的容器中。最重要的是,你应该避免行循环。
如。 T.Values
你也可以指定你的评论
T.Properties。进口变量的描述= '这是我的;
1评论
科迪莉亚大卫
科迪莉亚大卫 2019年4月16日
不幸的是我需要在结构领域。这是要求项目的一部分。不过谢谢你的提示!

登录置评。

标签

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!