声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1228|回复: 6

[综合讨论] 请问能否在文件读写中实现这样的过程?

[复制链接]
发表于 2009-6-16 23:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近在处理数据的时候需要先读入一个大的文本文件(这个文件是事先用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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-6-17 10:00 | 显示全部楼层
...矩阵形式:M*N,所有数值都是1...

为何不直接用ones(m,n) !?

还有建议楼主说清楚些, 最好给出完整原始问题, 及LZ初步的代码!
 楼主| 发表于 2009-6-17 10:02 | 显示全部楼层

回复 沙发 ChaChing 的帖子

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

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

[ 本帖最后由 ChaChing 于 2009-6-25 20:27 编辑 ]
发表于 2009-6-17 11:04 | 显示全部楼层
帮助中Accessing Files with Memory-Mapping这部分的内容应该是你想要

评分

1

查看全部评分

 楼主| 发表于 2009-6-17 15:38 | 显示全部楼层


正在看ydlcsu提供的信息,希望能够解决这个问题,不过大家还有其他建议的话,请直言阿,谢谢。
发表于 2009-6-25 11:05 | 显示全部楼层
读取数据的时候用
x=importdata('x.txt')
保存数据的时候用
dlmwrite('x.txt',x)
会不会快一点?
发表于 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);
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-26 13:49 , Processed in 0.073293 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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