kanhlbai 发表于 2009-6-16 23:02

请问能否在文件读写中实现这样的过程?

最近在处理数据的时候需要先读入一个大的文本文件(这个文件是事先用ones(M,N)命令生成后保存在工作目录下的),读入这个文件的时候使用load命令,之后在程序中对文件中的数据进行操作,其实就是把里面某些位置的数值换成0,最后在把文件又写回磁盘(使用save命令)。由于文本文件较大,读取的时候,不仅速度慢,而且也要求内存足够大。同样在存储的时候也有这样的问题。所以一整个晚上都在想能不能实现一个既可以提高读去和存储速度,又可以节省内存的过程:只需要把文件打开,而不是load到内存中,操作的时候只对文本文件中需要替换的数据(程序中的其他函数能够确定相应的位置(i,j))进行操作呢?向大家请教,谢谢。
其实就是有这个想法,昨天看了一些help中有关读写的内容,也尝试写了一个M文件,但是没有实现这个想法。下面把M文件给出来,请大家帮忙,谢谢。

function speed
%
fid=fopen('file.txt','r+') ;    %file.txt 这个文本文件是由ones(1000,1000)生成并保存在当前工作目录下
%
A=fread(fid);      %读文件
%
这儿省略了一部份函数,主要是确定A中需要把数值1换成0 的具体位置
%
A(i,j)=0;% 这个语句之前已经确定了具体的i,j,现在把A中相应的位置换成0
%
fwrite(fid,A);

%
就这些,应该有很多问题,请大家帮忙,谢谢。

[ 本帖最后由 kanhlbai 于 2009-6-17 10:20 编辑 ]

ChaChing 发表于 2009-6-17 10:00

...矩阵形式:M*N,所有数值都是1...
为何不直接用ones(m,n) !?

还有建议楼主说清楚些, 最好给出完整原始问题, 及LZ初步的代码!

kanhlbai 发表于 2009-6-17 10:02

回复 沙发 ChaChing 的帖子

谢谢斑竹,我昨天回去的时间有点赶,所有没有把问题说清楚,现在正在编辑。

恳请大家出谋划策,谢谢!

[ 本帖最后由 ChaChing 于 2009-6-25 20:27 编辑 ]

ydlcsu 发表于 2009-6-17 11:04

帮助中Accessing Files with Memory-Mapping这部分的内容应该是你想要

kanhlbai 发表于 2009-6-17 15:38

原帖由 ydlcsu 于 2009-6-17 11:04 发表 http://www.chinavib.com/forum/images/common/back.gif
帮助中Accessing Files with Memory-Mapping这部分的内容应该是你想要

正在看ydlcsu提供的信息,希望能够解决这个问题,不过大家还有其他建议的话,请直言阿,谢谢。

hrbeu2008 发表于 2009-6-25 11:05

读取数据的时候用
x=importdata('x.txt')
保存数据的时候用
dlmwrite('x.txt',x)
会不会快一点?

friendchj 发表于 2009-6-25 17:46

help
fseek
fseek
Set file position indicator
Syntax
status = fseek(fid, offset, origin)
Description
status = fseek(fid, offset, origin) repositions the file position indicator in the file with the given fid to the byte with the specified offset relative to origin.
例如:
fid=fopen('idl2.txt','r+');
fseek(fid, 4, 'bof');
fwrite(fid, num2str(20));
fclose(fid);
页: [1]
查看完整版本: 请问能否在文件读写中实现这样的过程?