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