找回密码
 注册
Simdroid-非首页
查看: 65|回复: 4

matlab的exist命令在循环语句中的问题

[复制链接]
发表于 2013-8-21 11:25:01 | 显示全部楼层 |阅读模式 来自 广东深圳
我要对一个文件夹中的全部文件进行处理,用了循环语句,但在用exist判断某文件是否存在(若存在进行其他处理)出错。简单程序如下:

clear; clc;
for i = 1:1000;
      file2=['G:\datapressure\xicy2-0' num2str(i)];   %文件xicy2-01,xicy2-02....含有字符
    if exist('file2','file')==2 % 因个别文件不存在,故用这个语句来判断,但整个循环中exist('file2','file')的值全为0,下面语句不执行
        data_all2=importdata(file2);
         data2=data_all2.data;
         .......  
    end
end

若用exist('G:\datapressure\xicy2-01','file') 当文件存在时值是2,不存在值为0。但有上千文件,不能手动处理。请教高手上面程序要怎样修改啊??或者,不用exist也行,只要能判断某文件是否存在,以便对存在文件进行处理就行。先谢了
发表于 2013-8-21 15:46:31 | 显示全部楼层 来自 四川
Simdroid开发平台
你判断文件是否存在的语句有两个问题。第一个,文件名的建立方式。你采用的是字符数组形式。实际上应该采用字符串形式。可以利用函数strcat。第二个,文件的扩展名未指明,即便你的扩展名都隐藏了,也要明确指出,否则它是无法显示的。综上,你的file2赋值语句要改成如下:
  1. file2=strcat('G:\datapressure\xicy2-0',num2str(i),'.txt')
复制代码
这里面的txt是我假定的文件扩展名,你可以改成其它的。
回复 不支持

使用道具 举报

 楼主| 发表于 2013-8-21 17:02:16 | 显示全部楼层 来自 广东深圳
本帖最后由 guohf 于 2013-8-21 17:03 编辑
lengyunfeng 发表于 2013-8-21 15:46
你判断文件是否存在的语句有两个问题。第一个,文件名的建立方式。你采用的是字符数组形式。实际上应该采用 ...

谢谢指点。我已知道原因了,要将程序中'file2'的引号去掉。

另外,我的文件是fluent导出的
ASCII数据(带有标头),拓展名用'.dat'或'.txt'试过不行。如用下面的程序,也有一些问题(见标红处),上传部分数据,请帮忙看下用什么拓展名?谢谢:


clear; clc;

directory_name = 'G:\datapressure';  %这里直接对目录名赋值了
if isequal(directory_name,0)
    return
end

%files = dir([directory_name,'\*.dat']); %若拓展名'.dat' 或'.txt',下面的文件数n=0
files = dir([directory_name,'\*']);%不加拓展名,可读出
n=size(files,1),%return
A=[];

for i = 1:n;
     % file2=[directory_name,'\',files(i).name] %用这个命令时,结果是“file2=G:\datapressure\.”,不知为什么

   
file2=['G:\datapressure\xicy2-0' num2str(i)];   %文件xicy2-01,xicy2-02....含有字符
      if exist(file2,'file')==2
        
          data_all2=importdata(file2);
           data2=data_all2.data;
            .......  
          end
end

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2013-8-21 23:05:10 | 显示全部楼层 来自 四川
guohf 发表于 2013-8-21 17:02
谢谢指点。我已知道原因了,要将程序中'file2'的引号去掉。

另外,我的文件是fluent导出的ASCII数据(带 ...

1、第一个问题:“%若加拓展名‘.dat'或'.txt',下面的文件数n=0”
dir后面所跟的参数一般直接跟文件目录名。你这里的通配符和转义符放在一起是会出问题的,它直接找*.dat或者*.txt文件了,所以n=0。建议以后你再写这种涉及外部目录的时候,用“/”。
2、第二个问题:“不加拓展名,可读出”
你的这句语句翻出来应该就是directory_name\*,它代表的就是directory_name这个目录。不过通配在这里似乎未起到作用。
3、% file2=[directory_name,'\',files(i).name] %用这个命令时,结果是“file2=G:\datapressure\.”,不知为什么?
用你前面的dir命令得到的structure第一个元素是母目录、第二个元素是子目录,第三个元素才开始是你这个目录下的文件。建议你用fullfile这个命令与dir进行组合后来获取目录下的文件名,或者直接采用dir命令与"/"符以及“*”符获得全部的文件名。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-8-22 15:35:43 | 显示全部楼层 来自 广东深圳
lengyunfeng 发表于 2013-8-21 23:05
1、第一个问题:“%若加拓展名‘.dat'或'.txt',下面的文件数n=0”
dir后面所跟的参数一般直接跟文件目录 ...

谢谢,解说的很详细。每次有问题,版主都很热心的帮忙,非常感谢。
另外,之前的关于圆的笛卡尔坐标转360度角的问题,等我有时间考虑清楚问题出在那,一定会在论坛里回复的,总之非常感谢版主
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-22 13:23 , Processed in 0.035592 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表