您好我在文本文件中有这些数据,我想读取其中的数据。
2003,04,15,15,15,00,38.4279,-76.61,1565,3.7,0.0,38.19,-999,-999,3.9455,3.1457,2.9253
2003,04,15,16,50,00,38.368,-76.5,1566,3.7,0.0,35.01,-999
2003,04,15,17,50,00,38.3074,-76.44
我使用了以下代码:
a= zeros(4460,216);
nl = a(:,1);
nc = a(1,:);
if fid>0
for i = 1:length(nl)
d = textscan(Ligne,'%f','whitespace',',');
numbers = d{:}';
D = a(i) + numbers;
i = i+1;
end
Ligne = fgetl(fid);
end
问题在于我无法实现矩阵D.每次都要替换数据。有人可以帮帮我吗?
答案 0 :(得分:2)
假设您的文件如下:
Header
Header
Header
2003,04,15,15,15,00,38.4279,-76.61,1565,3.7,0.0,38.19,-999,-999,3.9455,3.1457,2.9253
2003,04,15,16,50,00,38.368,-76.5,1566,3.7,0.0,35.01,-999
2003,04,15,17,50,00,38.3074,-76.44
在示例中,您有 4 标题,分隔符为 ','
。现在只需使用importdata
作为一个非常方便的导入函数:
X = importdata('myData.txt',',',4)
返回:
X =
data: [3x17 double]
textdata: {4x17 cell}
colheaders: {1x17 cell}
X.data
包含您的数字数据。由于文件中的数据在每一行中都有不同数量的条目,因此缺少的值会被NaN
填充。 X.textdata
包含跳过的标题行作为字符串。
如果需要,您可以使用textscan处理它们:
additionalInformation = textscan(X.textdata, ... )
使用suggested by Shai并且行偏移设置为 4 的替代csvread
也可以完成此任务。但请注意,缺失值将替换为零,这是我个人不喜欢进一步处理数据的原因。特别是因为您的实际数据还包含零。
X = csvread('myData.txt',4)
答案 1 :(得分:0)
您是否考虑过使用csvread
?
D = csvread( filename );
关于您的代码,您有两个主要错误
D = a(i)+numbers;
- 您实际上在每次迭代时覆盖D
。请尝试使用D(i,:) = a(i,:)+numbers;
i=i+1;
- 你改变循环中的循环变量!如果您在for
上使用i
- 循环,则无需手动递增。
还有一些评论:
您预先分配了a
但未D
,请考虑预先分配D
。
答案 2 :(得分:0)
你已经说过了:每次都更换D.这是因为您在访问D时未指定索引。您应该执行类似
的操作D = zeros(size(a))
....
if ...
for ...
...
D(i) = a(i) + numbers;
...
end
end
但正如Shai指出的那样,你的问题可能会有一个更简单的解决方案。
答案 3 :(得分:0)
最后我使用了这些代码行。 D = NaN(大小(a)); I = 1;
while ~(Ligne==-1)
d = textscan(Ligne,'%f','whitespace',',');
numbers = d{:}';
D(i,:) = numbers;
Ligne = fgetl(fid);
i=i+1;
end