不爱陌生人 发表于 2009-1-6 11:09

请问:如何将字符串引用到创建的txt文件名上?

我在写txt文件时,用的是
fid=fopen('路径\文件名.txt','wt');
fprintf=(fid,'输出的数据格式\n',变量名);
fclose(fid);
我想问,新创建的txt文件能不能用我m文件里的一个字符串来代替,这样我做很多个文件写出的时候,就不用一个一个起文件名了。
另外,在导入文件的时候load(' ')单引号里面是不是也可以直接调用字符串来代替?
不知道我把问题说明白了没有
哪位好心人能给我指导一下。

songzy41 发表于 2009-1-6 11:30

新创建的txt文件完全可以由字符串来产生:
fid=fopen(,'wt');
其中filepath是路径,例如为'D:\Matlab\',而filename是文件名,filepath和filename都必须是字符串常数,同时注意在[ ]中各字符串之间要有空格。

ChaChing 发表于 2009-1-6 11:40

回复 楼主 不爱陌生人 的帖子

参考下
doc uigetfile
doc uiputfile

tigerhead099 发表于 2009-1-9 19:36

建议楼主好好学学eval函数   这个函数应该可以实现你的目的

不爱陌生人 发表于 2009-1-12 16:15

回复 沙发 songzy41 的帖子

谢谢,我前几天有些别的事,这个就先放下了
我试过你说的命令,出错,我再试试
我其实就是想让一个文件能自己导入数据,然后计算,再导出。但是文件命名的问题解决不了的话,我就得一个一个自己来。
不过还是谢谢你

不爱陌生人 发表于 2009-1-12 16:17

回复 地板 tigerhead099 的帖子

谢谢,我那天也考虑了用eval这个函数,可能是我的书不太详细,我还没弄的太明白,我再试试看看帮助的信息吧。

不爱陌生人 发表于 2009-1-12 16:57

回复 沙发 songzy41 的帖子

你好,我刚才又试了下你说的命令,出错
后来我把fid=fopen(,'wt');改成:
fid=fopen([' filepath filename.txt'],'wt');
这样可以运行了,可是和不加[ ] 没有分别,中间还是不能引用一个数组上的变量来命名文件名,我又试了eval 变量名(n)的方法还是不行

不爱陌生人 发表于 2009-1-12 17:01

回复 地板 tigerhead099 的帖子

我刚才看看了eval的命令,我也试了下,不能满足我的要求,我不是只简单地要求输出一个字符串,我是在fid=fopen(' ')中直接用数组中的一个元素来命名文件名。
eval好象只能把一个数组上的变量输出到屏幕上,但是在''中是不生效的。

不爱陌生人 发表于 2009-1-12 17:06

回复 板凳 ChaChing 的帖子

我看了下
doc uigetfile
doc uiputfile
其中uiputfile是可以把一个字符串作为文件名直接保存,但是要造路径,而且还是没有解决直接引用变量自动作为文件名的问题。

songzy41 发表于 2009-1-12 20:11

原帖由 不爱陌生人 于 2009-1-12 16:57 发表 http://www.chinavib.com/forum/images/common/back.gif
回复 沙发 songzy41 的帖子
你好,我刚才又试了下你说的命令,出错
后来我把fid=fopen(,'wt');改成:
fid=fopen([' filepath filename.txt'],'wt');
这样可以运行了,可是和不加[ ] 没有分别,中间还是不能引用一个数组上的变量来命名文件名,我又试了eval 变量名(n)的方法还是不行

看来楼主没有完全理解我的意思。我在这里举一个例子,说明在程序中怎么用字符串构成名,同时每次循环中改变文件名:
filepath='D:\Matlab\';
for l=1 : 17
x=load();
y=load();
.
.
end
在每次循环中读入的都是不同的文件。

ChaChing 发表于 2009-1-12 21:17

回复 9楼 不爱陌生人 的帖子

善用uigetfile/uiputfile可以让程式多样变化!
譬如资料处理要选定档案, 可借由uigetfile取得路径/档名, 如此可任意选目录档案, 程式比较一般化! 甚至於可以取消选取, 进入另一处理过程!
LZ试试下! 没给资料, 自己适宜修改!

TitleS = 'Choise the file (Cancel to Quit from Data Process) :'; = uigetfile('*.mat',TitleS);
if FileName==0, beep; disp('File not ready ?'); break;
else load(); end

DefName = ['zzz77.mat'];TitleS = 'Enter the filename to save :';
= uiputfile(DefName,TitleS)
if FileName~=0, save(,'Var1','Var2','Var3'); end

Billow 发表于 2009-1-13 15:30

回复 楼主 不爱陌生人 的帖子

不知道是我的理解是不是正确,你是不是想把一些名字保存在一个数组上面,这样写多个文件就不用去一一写了是不是。那么要是这样的话。可以仿效如下写法。
这个会同时生成100个.txt文件
a = 2;
for i = 1:100
    s ='XX_t.txt' ;
    s =subs(s,'XX_t',i);
    s =char(s);                %字符型
fid = fopen( s,'wt');
    fprintf(fid,'%d\n',a);
    fclose(fid);
end

例外,要是想同时生成多个文件夹也有如下的方法(这个是我看别人写的)
for i=1:100
s=strcat('mkdir foldername',int2str(i));
system(s);
end
但是 这个用要有两点要注意,一是mkdir和 foldername之间的空格。二是
如果你指定保存盘符路径的话如: s=strcat('mkdir E:\MATLAB program\自动创建多个文件\XX',int2str(i));
那么是逐级生成文件夹从E开始(如果文件夹没有创立的话)

[ 本帖最后由 Billow 于 2009-1-13 15:33 编辑 ]

不爱陌生人 发表于 2009-1-15 16:50

感谢大家的回复~~
以上各位给出的回复我都一一尝试了,可能是我自己的问题,也可能由于是版本的问题,有一些办法我没有运行成功。不过最后问题还是解决了,总结一下写在下面,也算是对以上各位的一个答谢吧:

循环导入文件:
1.文件名是顺序数字
filepath='路径';   %例:filepath='D:\new\';
for i=1:n
    A(i)=load();
end
2.如果文件名里有字符
filepath='路径';
for i=1:n
    A(i)=load();   %'in'只是举个例子,可以替换为需要的字符
end
3.如果文件名是不规律的数字,且已经存在于一个数组内
以'namelist'为数组名为例
filepath='路径';
for i=1:n
    A(i)=load();   %'in'只是举个例子,可以替换为需要的字符
end
**注意:filepath、num2str命令及'.txt'之间必须有空格
             如果不加filepath也可以,但是所加载文件须与当前m文件在相同路径中

循环写出文件:
其实循环写出文件和导入是相似的:
1.如果写出文件是顺序数字为文件名
filepath='路径';   %如果不写路径,将会在matlab当前默认的路径上创建文件
for i=1:n
    fid=fopen(,'wt');
    fprintf(fid,'格式',变量名);
    fclose(fid);
end
2.同导入,如果文件名中需要有字符
其他命令不变,
fid=fopen(,'wt');
3.如果写出文件的文件名在一个数组里,且为纯数字的数组,以outlist为例:
fid=fopen(,'wt');
4.如果写出文件的文件名有字符,应该存在一个元胞数组内:
outlist={'out456','outw87'......};
其他命令不变
fid=fopen(,'wt');
%%也可以在元胞数组内把后缀名也写上,这样就不用在fid中写'.txt'了。
%%例:outlist={'out456.txt','outw564.txt',.....};
fid=fopen(,'wt');

[ 本帖最后由 不爱陌生人 于 2009-1-15 17:03 编辑 ]

ChaChing 发表于 2009-1-15 21:11

原帖由 不爱陌生人 于 2009-1-15 16:50 发表 http://www.chinavib.com/forum/images/common/back.gif
...如果文件名是不规律的数字...
如果文件名是不规律的(不一定仅数字不规律)!
可以将要处理的档案, 全摆在一个档案中, 利用dir指令取得相对应档名, 这样程式会更一般化, 无需每次因档名不同更改程式!

不爱陌生人 发表于 2009-1-21 15:32

回复 14楼 ChaChing 的帖子

楼上的ChaChing我看了你建议,并且看了eight总结的txt文本的帖子,还有个小问题:
file=dir('*.txt');
我用file(i).name可以得到文件名,是有后缀的
我用=fileparts(file)可以分别得到路径,文件名,后缀,和‘’,这时的name就仅是文件名了,我想问的是:要是只想得到文件名,其他不要,你知不知道前面的括号应该怎么写?我的意思是哪种写法可以省略pathstr这些命令
页: [1] 2
查看完整版本: 请问:如何将字符串引用到创建的txt文件名上?