注册 登录
编程论坛 Matlab

[求助]我用[a,count]=fscanf(fid,format,size)出现的问题

happyddm 发布于 2006-07-12 21:29, 4489 次点击

我在一篇文献上看到,用上面的函数读取ASCII 文件,并将数据写入矩阵a。
我有一个ASCII 文件HSN1(来源于一个原始数据经过软件处理后,选择export as ASCII 得到的),调入Matlab,在但出的import wizard中,选择了默认的select column separator - tab,然后点next,再点finish,就完成了数据输入。产生的文件名是HSN1,Value是《16393*1》,class是cell,。(请问这里的Value和class分别是什么意思)
我想把这个文件的数据转换到矩阵中,写的程序如下请
>> fid=fopen(HSN1)

fid =

"stdin"

>> [A]=fscant(stdin)
??? Undefined function or variable 'stdin'.

>> [A]=fscant("stdin")
??? [A]=fscant("stdin")
|
Error: Missing variable or function.

请各位朋友帮忙看一下,问题出在哪,万分感谢!!!!

只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2006-7-12 21:48:26编辑过]

14 回复
#2
zhangenter2006-07-12 21:46
fscant???
#3
happyddm2006-07-12 21:49
不好意思,应该是fscanf,大侠请留步

[此贴子已经被作者于2006-7-12 21:50:11编辑过]


#4
zhangenter2006-07-12 23:40

你已经把文件HSN1读到workspace了,储存为一个变量名为HSN1的,16393行1列,单元类型的矩阵。

“我想把这个文件的数据转换到矩阵”,不理解你这句话的意思
如果要改变矩阵类型的话:
A=cell2mat(HSN1); %单元转字符串,位数不等不能转
B=str2double(A); %字符串转数

#5
happyddm2006-07-13 09:00
多谢马里亚纳海沟!!!!
我看的文献是从维谱上下的,名叫“Matlab读入数据的几种方式探讨”,里面写道,[a,count]=fscanf(fid,format,size),该语句利用fscanf函数,从指定的文件中读取数据并将数据转换成format参数指定的格式,写入矩阵A。
我是想利用一些合适的函数,把我的实验数据(文本格式和ASCII格式的文件),写入矩阵里,进行进一步的统计分析。
我是初学者,问问题问的也不专业,给大家添乱了,不过还请各位大侠,都能走过路过进来看看,指点迷津啊,

[此贴子已经被作者于2006-7-13 9:01:11编辑过]

#6
happyddm2006-07-13 09:10
您是说我把文件HSN1读到workspace了,同时就产生了一个矩阵是吗,哪就是说我就可以直接进行运算了,就不用再用那个函数进行转换了,不知我想的对不对

[此贴子已经被作者于2006-7-13 9:10:52编辑过]


#7
zhangenter2006-07-13 10:01

是不是只要读你上传的那个

[此贴子已经被作者于2006-7-13 10:02:00编辑过]

#8
happyddm2006-07-13 13:54

多谢马里亚纳海沟!!!
是的。那是一个核磁的图,我用一个处理核磁图的软件NUT处理后,save as ASCII 文件得来的。

#9
zhangenter2006-07-13 15:07
fid=fopen('text_1.txt','r');
A=[];
while(fgetl(fid)~=-1)
[A,count]=fscanf(fid,'%f');
if isempty(A)
fgetl(fid);
end
end
#10
zhangenter2006-07-13 15:57

在知道前8行不是你要转成矩阵的数据的情况下,对txt文件进行读取,建议用
[A(:,1),A(:,2)]=textread('text_1.txt','%f%f','headerlines',8);

#11
happyddm2006-07-14 08:57
谢谢,马里亚那海沟!!!多谢您的关注!!!

您的回复已经很详细了,虽然我一下子来不能全明白,但我会仔细研究的,有问题还请您多关照。




matlab不是我的专业,现在的感觉是举步为艰,不知道您有过这种感觉没?原以为自学一下,再照着书和文献写的一步步进行,没想到问题还是不少,自己的自信心都快没了!不好意思,扯远了。我还是抓紧时间看吧。
#12
zhangenter2006-07-14 10:49

我学matlab也就一个多月,是做毕业设计的一个多月,也是来这网站的一个多月,并没多少经验。
如果我在论坛上回答了100个问题,那么其中90个我在看到题目是自己本来并不会的。
下面是解决别人问题的过程也是我学习的过程:
1.打开网上下载的指令集,根据我的关键字搜索指令。
2.在matlab下help一下(我英语四级都没过,大学都在玩网游,很多内容都看不懂,但是我会努力去读),看完顺便把help最      后的See also也要看一下。
3.在命令窗试试这些指令的几种用法。
4.最后回到别人的问题上来,调试成功后在论坛回复(有的我解决不了的问题,我也会上baidu里搜索一下,找找别人的  解决方法或者类似的题目)。

这个过程也许要花好几个小时,但是没关系,因为这段时间里我都在学习。

我觉得如果是抱着学习的目的,应该没有“举步为艰”这个概念,问题肯定是有的,多动动脑筋,多试试几种办法。解决不了也不必失去信心,我会对自己说哥德巴赫猜想我不是也解决不了吗。

help是个问不倒的好老师
baidu是本看不完的好参考书
论坛是套做不光的好习题集   







#13
happyddm2006-07-14 11:40

谢谢,马里亚那海沟!!!好感动啊!
我是学东西比较慢的,不像你们很快就能接受。
我刚才查了一下Help,
在textread中写道,
As an alternative to textread, use the Import Wizard. To activate the Import Wizard, select Import Data from the File menu.这句话是说textread和Import Wizard的功能是一致的吧,那我用Import Wizard调入文件后,还要用到textread命令吗?

那个文件的前八行,是应该删去,不列入矩阵进行下一步计算的,所以我在用Import Wizard调入文件后,有用了textread命令。其中fid的返回值是stdin,(我查了stdin是文件指针的意思,指示文件在内存中的位置,这个解释对吗)
fid=fopen(HSN1)

fid =

"stdin"

>> [A(:,1),A(:,2)]=textread('stdin','%f%f','headerlines',8)
??? Error using ==> textread
File not found.

其实fid的返回值是stdin时,是否就说明,我用Import Wizard调入的文件本身就有问题啊。

我看不行,就又单独用下面的试了一下


>> [A(:,1),A(:,2)]=textread('HSN1','%f%f','headerlines',8)
??? Error using ==> textread
File not found.

提示还是错误,那是否也说明了我用Import Wizard调入的文件本身就有问题啊

#14
zhangenter2006-07-14 12:45
读什么文件都要带扩展名,比如:名为HSN1的文本文件的话用
[A(:,1),A(:,2)]=textread('HSN1.txt','%f%f','headerlines',8)
#15
happyddm2006-07-14 15:51

多谢,马里亚那海沟!!!
我现在有的是《Matlab7.0从入门到精通》,像上面类似的基础问题里面没写,您能否推荐一本最基础的教材。

1