Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String 将单元格日期转换为datenum,将空值转换为NaN_String_Matlab_Date_Cell Array - Fatal编程技术网

String 将单元格日期转换为datenum,将空值转换为NaN

String 将单元格日期转换为datenum,将空值转换为NaN,string,matlab,date,cell-array,String,Matlab,Date,Cell Array,我将一些数据从sql数据库下载到6000 x 5的单元格中。我希望将2:end列转换为datenum。在这四列中,数据库中的一些日期为空,请参见下面我正在下载的数据示例。我希望这些空日期为NaN或零 '100364MM' 'null' '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null' '100377MM' 'null' '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'

我将一些数据从sql数据库下载到6000 x 5的单元格中。我希望将2:end列转换为datenum。在这四列中,数据库中的一些日期为空,请参见下面我正在下载的数据示例。我希望这些空日期为NaN或零

 '100364MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100377MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100394MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100395MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100996MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
 '101005MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
我一直在玩下面的几行,但是我收到一条错误消息,说DATENUM失败了。我猜这是因为“空”吗

 my_dates = zeros(6000, 5)
 my_dates = cellfun(@datenum, data_matrix(:, 2:end));
问题是datenum在发现不一致的字符串时立即退出,并出现错误。所以,在你的情况下,很难用矢量化的方式来做,很难

下面是一个快速而肮脏的解决方案,其中包含try和for循环:

首先定义数据:

d = {'100364MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100377MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100394MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100395MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100996MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
     '101005MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'};
然后:

这给

result =
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729572      729572         NaN
         NaN         NaN      729572      729572         NaN
问题是datenum在发现不一致的字符串时立即退出,并出现错误。所以,在你的情况下,很难用矢量化的方式来做,很难

下面是一个快速而肮脏的解决方案,其中包含try和for循环:

首先定义数据:

d = {'100364MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100377MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100394MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100395MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
     '100996MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
     '101005MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'};
然后:

这给

result =
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729542      729542         NaN
         NaN         NaN      729572      729572         NaN
         NaN         NaN      729572      729572         NaN
矢量化方法-

%// a1 is the input cell array
a1= {
 '100364MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100377MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100394MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100395MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100996MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
 '101005MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'}

ind1 = ~strcmp(a1,'null')
a1(~ind1)={NaN}
ind1(:,1)=false

%// Choose one of the following two, as the output format demands
a1(ind1) = num2cell(datenum(a1(ind1))) %// datenum as cells of double
a1(ind1) = cellstr(num2str(datenum(a1(ind1)))) %// datenum as cells of strings
输出-

备选案文1:

a1 = 
    '100364MM'    [NaN]    [729542]    [729542]    [NaN]
    '100377MM'    [NaN]    [729542]    [729542]    [NaN]
    '100394MM'    [NaN]    [729542]    [729542]    [NaN]
    '100395MM'    [NaN]    [729542]    [729542]    [NaN]
    '100996MM'    [NaN]    [729572]    [729572]    [NaN]
    '101005MM'    [NaN]    [729572]    [729572]    [NaN]
备选案文2:

a1 = 
    '100364MM'    [NaN]    '729542'    '729542'    [NaN]
    '100377MM'    [NaN]    '729542'    '729542'    [NaN]
    '100394MM'    [NaN]    '729542'    '729542'    [NaN]
    '100395MM'    [NaN]    '729542'    '729542'    [NaN]
    '100996MM'    [NaN]    '729572'    '729572'    [NaN]
    '101005MM'    [NaN]    '729572'    '729572'    [NaN]
矢量化方法-

%// a1 is the input cell array
a1= {
 '100364MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100377MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100394MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100395MM' 'null'  '1997-06-01 00:00:00.0' '1997-06-01 00:00:00.0' 'null'
 '100996MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'
 '101005MM' 'null'  '1997-07-01 00:00:00.0' '1997-07-01 00:00:00.0' 'null'}

ind1 = ~strcmp(a1,'null')
a1(~ind1)={NaN}
ind1(:,1)=false

%// Choose one of the following two, as the output format demands
a1(ind1) = num2cell(datenum(a1(ind1))) %// datenum as cells of double
a1(ind1) = cellstr(num2str(datenum(a1(ind1)))) %// datenum as cells of strings
输出-

备选案文1:

a1 = 
    '100364MM'    [NaN]    [729542]    [729542]    [NaN]
    '100377MM'    [NaN]    [729542]    [729542]    [NaN]
    '100394MM'    [NaN]    [729542]    [729542]    [NaN]
    '100395MM'    [NaN]    [729542]    [729542]    [NaN]
    '100996MM'    [NaN]    [729572]    [729572]    [NaN]
    '101005MM'    [NaN]    [729572]    [729572]    [NaN]
备选案文2:

a1 = 
    '100364MM'    [NaN]    '729542'    '729542'    [NaN]
    '100377MM'    [NaN]    '729542'    '729542'    [NaN]
    '100394MM'    [NaN]    '729542'    '729542'    [NaN]
    '100395MM'    [NaN]    '729542'    '729542'    [NaN]
    '100996MM'    [NaN]    '729572'    '729572'    [NaN]
    '101005MM'    [NaN]    '729572'    '729572'    [NaN]