加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab文件操作及读txt文件(fscanf fprintf)

(2011-04-10 10:22:25)
标签:

杂谈

分类: 编程语言学习

matlab 输入 fscanf函数

 

matlab调用文本文档的数据,是相当简洁的。但是,目前不管是网络上,还是各类教材说的都很简陋。有时候抱着本书看了n次,仍然不知道如何下手。我最近遇到这样一个问题。又一个数据文件,当然后缀名是可以更改的,可以是txt也可以是dat。文件不是帮助中的简单数据形式,仅有一个类似矩阵般的数据排列。为了方便运算,数据体中一定要有文字注释,并且,数据分很多中,有渗透率的,也有井的。数据长度不同。而用matlab中的load要求必须要用行长度相同的数据。比如说:

1 2 3 4 4

2 3 4 5 6

    这样的数据很容易读入,用load非常合适,文字注释部分前面加上%,matlab就不会读文字行。但是我的数据是类似下面的

数据
   11   11      1.00  
  长度
      50     50      50     50     50     50     50     50     50      50     50
      50     50      50     50     50     50     50     50     50      50     50
  纵向
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00
    4.00
    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00    4.00

 

    这样的话,如果想用load函数,就要把这个数据分成好几份,分别调用,这对于程序的应用非常不便。于是我就考虑用fscanf函数,这个函数的应用与c++中有几分相似,呃,坦诚的说是非常相似,但是好像不支持换行,比如说遇到注释行然后跳过去,他不支持。也许支持,但我不会,^_^

    用fscanf是可以一个一个读入数据,也可以一下读入一个二维数组。非常方便。我找了个中文的帮助资料,但是是繁体的,不过大家凑活看吧。如果遇到注释行,用下面的语句fscanf(fid,'%6s',1); ,其中的6代表读入的字码长度。本来想多写点,但是好累,休息会,编程不是人干的活。

正式之读取资料函数如下之格式:
A=fscanf(fid,format)
[A, count]=fscanf(fid,format,size) [A, count]=fscanf(fid,format,size)
    這個指令可以自fid所標示的檔案中將其資料依format的格式取出,並置於矩陣A中。这个指令可以自fid所标示的档案中将其资料依format的格式取出,并置于矩阵A中。 fid的定義與前述之fprintf指令相同。 fid的定义与前述之fprintf指令相同。 另一種型式則增加count與size兩參數。另一种型式则增加count与size两参数。 count表示已完成的資料筆數。 count表示已完成的资料笔数。 而size則是決定讀入之資料量,可用[m,n]表示,表示讀入之資料可填滿mxn的矩陣。而size则是决定读入之资料量,可用[m,n]表示,表示读入之资料可填满mxn的矩阵。 其中n 可用inf取代,代表EOF(End of File)。其中n可用inf取代,代表EOF(End of File)。

    此處格式 format 之 % 符號大體上與 fprintf 相同,其中 %e,%f,%g 均代表具有浮點之數據。 此处格式 format 之 % 符号大体上与 fprintf 相同,其中 %e,%f,%g 均代表具有浮点之数据。 以 hd 為例, 12 為數值之總位數, d 代表使用整數,其前面所置的文字表示整數的型式, h 代表短整數, l 代表長整數,而 lg 則代表雙精度浮點值。 以 hd 为例, 12 为数值之总位数, d 代表使用整数,其前面所置的文字表示整数的型式, h 代表短整数, l 代表长整数,而 lg 则代表双精度浮点值。 這些文字代碼可參考 fprintf 指令,其功能相似。 这些文字代码可参考 fprintf 指令,其功能相似。


fid=fopen('sinx.txt');
A=fscanf(fid,'%g %g',[2 inf]); %最後項為size,表示讀入二列資料,直到檔案底 A=fscanf(fid,'%g %g',[2 inf]); %最后项为size,表示读入二
列资料,直到档案底 
fclose(fid);

A=A'
A = A =
0 0.3142 0 0.3142
0.6283 0.9425 0.6283 0.9425
1.2566 1.5708 1.2566 1.5708
1.8850 2.1991 1.8850 2.1991
2.5133 2.8274 2.5133 2.8274
3.1416 0 3.1416 0
0.3090 0.5878 0.3090 0.5878
0.8090 0.9511 0.8090 0.9511
1.0000 0.9511 1.0000 0.9511
0.8090 0.5878 0.8090 0.5878
0.3090 0 0.3090 0

 

 

matlab中fprintf函数的具体使用方法实例

 

matlab中fprintf函数的具体使用方法实例如下:

fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:
fprintf(fid,format,A)
说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。
例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
>> a='string';
>> fid=fopen('d:\char1.txt','w');
>> fprintf(fid,'%s',a);
>> fclose(fid);
>> fid1=fopen('d:\char1.txt','rt');
>> fid1=fopen('d:\char1.txt','rt');
>> b=fscanf(fid1,'%s')
b =
string

matlab读txt文件

fid=fopen('fx.txt','r');
%得到文件号
[f,count]=fscanf(fid,'%f %f',[12,90]);
%把文件号1的数据读到f中。其中f是[12 90]的矩阵
%这里'%f %f'表示读取数据的形势,他是按原始数据型读出
fclose(fid);
%关闭文件
另外有的txt文件还可以用load来打开
其语句为
f=load('fx.txt')

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有