Matlab 打开特定的命名csv文件并将特定值提取到矩阵中
我正在尝试为Matlab 打开特定的命名csv文件并将特定值提取到矩阵中,matlab,date,csv,Matlab,Date,Csv,我正在尝试为yearticker的每一行打开一个csv文件,该文件根据yearticker的值命名 yearticker={'2013K';'2011WXK';'2013HDR'} 文件:2013K.csv、2011WXK.csv、2013HDR.csv 但是我不想打开整个文件。我只想返回日期向量中的特定日期以及前一天和后一天 date=[20030103;20110228;20130604] 最后,我希望得到一个矩阵M,类似于为日期向量的每个事件提供一列 M=[1.057….;0.06;-1.
yearticker
的每一行打开一个csv文件,该文件根据yearticker
的值命名
yearticker={'2013K';'2011WXK';'2013HDR'}
文件:2013K.csv、2011WXK.csv、2013HDR.csv
但是我不想打开整个文件。我只想返回日期
向量中的特定日期以及前一天和后一天
date=[20030103;20110228;20130604]
最后,我希望得到一个矩阵M
,类似于为日期向量的每个事件提供一列
M=[1.057….;0.06;-1.0633]
如果有人能帮我解决这个问题,那就太好了。不幸的是,我的matlab技能太低,无法为类似的问题找到解决方案来解决我的问题
CSV文件内容:天数和每日返回
日期、报税表
20030101,.05
20030102,.057
20030103,.06
20030106、.06333
以下是一个基本的工作示例:
为了简化我的示例,我假设日期不能是数据文件中的第一行或最后一行。如果可能发生这种情况,您需要添加一点额外的逻辑来处理它 以下是一个基本的工作示例:
为了简化我的示例,我假设日期不能是数据文件中的第一行或最后一行。如果可能发生这种情况,您需要添加一点额外的逻辑来处理它 请参阅:。据我所知,MATLAB不具备导航到文件中特定行的能力。一种选择是使用一行一行地走,直到你到达你想要的那一行。另一个选择是读入整个文件并在事后搜索。谢谢。我可以通过逐行读取数据示例(litcount函数)手动查找特定日期,但无法使用结果(
>linebyline 1:20030103.06 ans=1
),并且不知道如何为循环运行该日期。请参阅:。据我所知,MATLAB不具备导航到文件中特定行的能力。一种选择是使用一行一行地走,直到你到达你想要的那一行。另一个选择是读入整个文件并在事后搜索。谢谢。我可以通过逐行读取数据示例(litcount函数)手动查找特定日期,但无法使用结果(>linebyline 1:20030103.06 ans=1
),也不知道如何运行循环。非常感谢。这很有效。两个小问题:如果我将您的方法作为函数运行,如何处理不存在的文件<代码>输入变量=[cellstr(num2str(date(:))yearticker]代码>对于i=1:311
inputvar2=inputvar(i,:)代码>[M]=搜索(inputvar2{:})代码>V(:,i)=M(:,2)
end
如果无法打开文件,则返回-1
。您可以将其与if
语句一起使用,以决定是否输入while
语句。你也可以用类似的方式。太好了。非常感谢。你能给我一个最后的提示我怎样才能解决我的最后一个小问题吗。我收到一些文件的错误消息。我认为它出现在空文件或部分空文件上<代码>搜索错误(第52行)M=[…
来自非单元格数组对象的单元格内容引用。
第52行是循环尝试将结果写入矩阵M的步骤。我只希望循环在文件中找不到数据或未完成数据的情况下写入0。如果您有与此答案的实现相关的单独问题,它将问一个新问题比试图在评论中传达信息更有益。非常感谢。这很有效。两个小问题:如果我将ur方法作为函数运行,如何处理不存在的文件?inputvar=[cellstr(num2str(date(:))yearticker];
对于i=1:311
inputvar2=inputvar(i,:);
[M]=search(inputvar2{:});
V(:,i)=M(:,2);
end
如果无法打开文件,它将返回-1
。您可以将其与If
语句一起使用,以决定是否输入while
语句。您也可以以类似的方式使用。太好了。谢谢。您能给我最后一个提示,如何解决我的最后一个小问题。我得到了这个错误一些文件的年龄。我认为它出现在空文件或部分空文件处。搜索错误(第52行)M=[…
来自非单元格数组对象的单元格内容引用。
第52行是循环尝试将结果写入矩阵M的步骤。我只希望循环在文件中找不到数据或未完成数据的情况下写入0。如果您有与此答案的实现相关的单独问题,它将提出新问题比试图在评论中传达信息更有益。
date = '20030103';
nheaderlines = 1;
tdata_left = [];
tdata_center = [];
tdata_right = [];
ii = 1;
fID = fopen('test.csv', 'r');
while ~feof(fID) % Read in lines until we get to the end of the file
tline = fgetl(fID); % Read in the next line of data
if ii <= nheaderlines
% Don't need to do anything until we get past the headers
ii = ii + 1;
else
tdata_left = tdata_center; % Shift previous day's data left
tdata_center = strsplit(tline, ','); % Split line at delimiter
if strcmp(tdata_center{1}, date) == 1 % Compare the date to your query date
% Matched, get one more line then stop reading from the file
tline = fgetl(fID);
tdata_right = strsplit(tline, ',');
break
else
% No match, move on to the next line
ii = ii + 1;
end
end
end
fclose(fID);
% Generate the final matrix
M = [ ...
-1 str2double(tdata_left{2}); ...
0 str2double(tdata_center{2}); ...
1 str2double(tdata_right{2}) ...
];
M =
-1.0000 0.0570
0 0.0600
1.0000 0.0633