Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 打开特定的命名csv文件并将特定值提取到矩阵中_Matlab_Date_Csv - Fatal编程技术网

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