Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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中按条件加载文件_Matlab - Fatal编程技术网

MatLab中按条件加载文件

MatLab中按条件加载文件,matlab,Matlab,我已经搜索了一些从分子数据库加载xyz文件(一个带有数字的表)的方法,但无法让代码按照我的要求完美工作 如果比较矩阵为=0,则打开所有文件;如果比较矩阵的大小为1,1,但与0不同,则将所有文件与compare中的文件进行比较;最后,如果比较矩阵的大小大于1,1,则指定文件并使其工作 此外,这些文件都是用数字命名的,如果不重命名就可以打开它们,那就太好了 如果我记得我的matlab是2016年,我不经常编码,这就是为什么我把语法搞得一团糟,并希望让它在长期的比较中更容易工作。如果有人知道如何打开x

我已经搜索了一些从分子数据库加载xyz文件(一个带有数字的表)的方法,但无法让代码按照我的要求完美工作

如果比较矩阵为=0,则打开所有文件;如果比较矩阵的大小为1,1,但与0不同,则将所有文件与
compare
中的文件进行比较;最后,如果比较矩阵的大小大于1,1,则指定文件并使其工作

此外,这些文件都是用数字命名的,如果不重命名就可以打开它们,那就太好了

如果我记得我的matlab是2016年,我不经常编码,这就是为什么我把语法搞得一团糟,并希望让它在长期的比较中更容易工作。如果有人知道如何打开xyz文件的在线数据库,那就更好了

cd input
compare=['a2';'s4'];
cd ..
NumMols=size(compare);
if compare = 0
  compare = dir;
  compare = compare(~[compare.isdir]);
  NumMols=size(compare);
else if size(compare)=(1,1)
  FileNrOne=compare
  compare = dir;
  compare = compare(~[compare.isdir]);
  compare = compare(~[FileNrOne]);
  NumMols=size(compare)+1;
end

for k=1:NumMols
  cd input
  mol = dlmread(compare(k),'\t');
  cd ..
end
编辑1: 我正在添加我所使用的代码,因为有一条注释要求一些我已经运行并运行的代码。我还需要重命名文件,以便文件名中没有数字

cd input
compare=['a';'s'];
cd ..
NumMols=size(compare);
for k=1:NumMols
  cd input
  mol = dlmread(compare(k),'\t');
  cd ..
%some comparisons
end
%more comparisons

据我所知,您的问题是,您希望获取一个包含零个、一个或多个项目的文件名列表,并且您希望在每种情况下采取不同的操作。您要执行的操作之一是读取特定目录中的文件名,并将其与原始列表中的文件名进行比较

我在代码中看到的第一个问题是,您将列表指定为字符数组:

compare=['a';'s'];
在进行比较时,这可能会给您带来问题,因为每个文件名都会填充空格,使其与最长的文件名长度相同。改为使用字符串的单元格数组。要检查此数组中有多少项,请使用
length

接下来,您要获取目录的内容:

compare = dir;
compare = compare(~[compare.isdir]);
没关系,它会为您提供一个结构数组,其中包含所有文件的详细信息,但不包括目录。但是这个

compare = compare(~[FileNrOne]);
没有意义,因为据我所知,
FileNrOne
应该是字符数组,而
~['some character array']
只返回一个逻辑数组,即字符数组的长度,所有元素都为false。如果您有一个来自
dir
-的结构数组,我们称之为
dirResult
-并且要删除名为
removeMe
的元素,请执行以下操作:

dirResult = dirResult(~strcmpi(removeMe, {dir.name}));
如果文件系统不区分大小写(Windows、Mac通常),请使用
strcmp
;如果文件系统区分大小写(Linux),请使用
strcmp


如果这个答案不能帮助您解决问题,请更新您的问题,更详细地说明问题所在,或者问一个新的更具体的问题。

因为我发现很难阅读其他问题的答案,我想添加一个解释我所学内容的答案会很好。另外,我可能学到了一些错误的东西,有人可能会在这里纠正我

首先,
compare
中的字符串单元格数组是在给定文件的情况下需要的,并且
iscell
检查该后缀

compare = {'s444173xyz.txt','a2345345xyz.txt'}; %or compare =0;
NumMols = size(compare);
tf = iscell(compare);
if tf == 0
 if compare == 0
  compare = dir('input');
  compare = compare(~[compare.isdir]);
  NumMols=size(compare);
 end
else
 if tf == 1
  if NumMols == 1
   FileNrOne=compare
   compare = dir;
   compare = compare(~[compare.isdir]);
   compare = compare(~[FileNrOne]);
   NumMols=size(compare)+1;
  end
 end
end

for k=1:NumMols
  cd input
  if tf == 1
    mol = dlmread(char(compare(k)),'\t');
  else
    mol = dlmread(compare(k).name,'\t');
  end
  cd ..
end

我需要处理
compare=compare(~[FileNrOne])
由于它会引发其他问题,在这些问题中,比较确实很有用

如果大小(比较)=(1,1)
这是无效的语法如果要发布代码,至少先运行它以确保它是正确的。生锈不是语法错误的借口。@CrisLuengo我添加了工作代码,我承认我没有测试“=”之类的问题,但请告诉我在哪里可以找到其他问题的解决方案。工作代码对我来说已经足够好了,但是其他人在使用它时可能会遇到麻烦,因为它可能会被用于超出我预期的用途。让它更自动化会鼓励其他人使用它做更好的事情。你能解释一下你期望的是什么吗要做什么?你认为数值
nummol
来自哪里?@nekomatic
compare
有我要比较的分子的文件名,
nummol
是迭代需要通过的文件数。谢谢你,我会考虑这些事情,因为我还没有