我想同时读取和写入同一个文件。这是一个简化的代码:
clc;
close all;
clearvars;
fd = fopen ('abcd.txt','r+'); %opening file abcd.txt given below
while ~feof(fd)
nline = fgetl(fd);
find1 = strfind(nline,'abcd'); %searching for matching string
chk1 = isempty(find1);
if(chk1==0)
write = '0000'; %in this case, matching pattern found
% then replace that line by 0000
fprintf(fd,'%s \n',write);
else
continue;
end
end
档案 abcd.txt
abcde
abcd23
abcd2
abcd355
abcd65
我想在每行的字符串中找到文本abcd
,并用0000
替换整行。但是,文本文件 abcd.txt 没有变化。该程序不会在文本文件中写任何内容。
有人可以说读取每一行并逐行写一个单独的文本文件。但是,这种方法存在问题。在最初的问题中,不是找到匹配的文本`abcd,而是有数千个元素的字符串数组。在这种情况下,我想读取文件,解析文件以查找匹配字符串,根据条件替换字符串,转到下一次迭代以搜索下一个匹配字符串,依此类推。因此,在这种方法中,逐行读取原始文件并同时写入另一个文件不起作用。
另一种方法是读取内存中的整个文件,替换字符串并迭代。但我不太确定它将如何运作。另一个问题是内存使用情况。
有何评论?
答案 0 :(得分:1)
您尝试做的事情无法以有效的方式实现。将Dim mHours As Long, mMinutes As Long, mSeconds As Long
mSeconds = 12345 ' Sample data
mHours = mSeconds \ 3600
mMinutes = (mSeconds - (mHours * 3600)) \ 60
mSeconds = mSeconds - ((mHours * 3600) + (mMinutes * 60))
MsgBox mHours & ":" & mMinutes & ":" & mSeconds
替换为abcde
(应该对第一行执行)将要求所有剩余的文本向前移动,因为您删除了一个字符。
而是解决此读取一个文件并写入一秒,然后删除原始文件并重命名新文件。