String 为什么Matlab在运行if语句时没有读取空单元格?

String 为什么Matlab在运行if语句时没有读取空单元格?,string,matlab,is-empty,equivalence,String,Matlab,Is Empty,Equivalence,我使用下面的循环来隔离记录了数据的实例和没有数据的实例。数据集非常大(根据列的不同从1000到6000不等),并且数据类型混合,因此我能想到的唯一实用解决方案是使用循环 我无法让if或while语句准确地读取空白。如果我使用for循环,它运行时没有任何错误,但它从未进入if的前半部分,这意味着我最终复制了数据,而不是分离数据。不同大小的数据使得for循环不受欢迎 while (isempty(andover_all{j,1})==1) if andover_all{h,33}=='';

我使用下面的循环来隔离记录了数据的实例和没有数据的实例。数据集非常大(根据列的不同从1000到6000不等),并且数据类型混合,因此我能想到的唯一实用解决方案是使用循环

我无法让if或while语句准确地读取空白。如果我使用for循环,它运行时没有任何错误,但它从未进入if的前半部分,这意味着我最终复制了数据,而不是分离数据。不同大小的数据使得for循环不受欢迎

while (isempty(andover_all{j,1})==1) 
  if andover_all{h,33}==''; 
      current_data{k,4}= formated_date{j};  
      k=k+1;
  else
    current_data{i,1}=formated_date{j};
    current_data{i,2}=andover_data{33}(j);
    i=i+1;
 end
 h=h+1;
end
Andover_all是字符串数组,current_数据和Andover_数据是混合数据类型的单元格数组。我试过使用isempty、[]、cellfun(@isempty和over_data)和一个函数eq.m来比较单元格元素,但它们都不起作用。我也不想从数据中删除空单元格,只是跳过它们


如果你有什么想法,请告诉我。空的确实是需要习惯的。这就像使用
inf
NaN
;像
NaN==NaN
1/0==inf
这样的东西应该返回什么?对这些人有特殊的规定。简单的,但你必须了解它们。为了使这些家伙的所有特殊规则减轻负担、更直观、更易读,MATLAB为他们提供了特殊功能:
isinf
(检测
inf
)、
isnan
(检测NaN)和
ISFIMITED
(检测
inf
NaN

清空也有特殊的行为和特殊的规则,需要一些人习惯。如果你仔细想想,最后一切都是有意义的:应该返回什么?或者
1=''

当然是空的。即使
[]==false
为空,
[]
在由
if
计算时也是
false
。容易吧?:)

不幸的是,没有与
isinf
isnan
等效的方法来检测特定类型的清空(没有no
ismptycell
ismptychar
等)。对于清空(即
ismpty
)有一个与
isfinite
等效的方法,它捕获
'
{}
,或
[]

但有时,像您的情况一样,需要检查特定的清空。空荡荡的人保留着他们的阶级。这意味着,
{}
实际上是一个单元格,
[]
实际上是一个由
double
s组成的数组

因此,要检测空单元格:

>> a = {};
>> iscell(a) && isempty(a)
ans = 
    1
要检测空字符串,请执行以下操作:

>> a = '';
>> ischar(a) && isempty(a)
ans = 
    1
要检测空阵列,请执行以下操作:

>> a = [];
>> isnumeric(a) && isempty(a)
ans = 
    1