【问题标题】:How to update txt file in matlab如何在matlab中更新txt文件
【发布时间】:2013-01-16 11:18:06
【问题描述】:

我想更新包含属性值对的 txt 文件中的一行,其中一个属性位于方括号之间,其值在下面的行中。这是一个示例文件:除此之外,我想忽略以“#”开头的注释行。另一方面,如果我想将 cmets 添加到注释行怎么办?

#===========================
#===========================
[system]
# comment 
programming 
#===========================
[information] 
#
application

在本例中,“系统”是一个属性,“编程”是它的值。同样,“信息”是另一种属性,而“应用”是它的价值。

我想用属性值对调用我的函数并更新 txt 文件中的相应值。到目前为止,我有以下内容:

fh = fopen(filename,'r');
 fh= fopen(filename,'w');
 while ~feof 
 line = fgetl(fh);
 if(line(1) == '[') && (line(end) == ']') 
value = lower(line(2:end-1)); 

然后我会将“值”与我的输入进行比较,以检查它是否与属性匹配。如果是这样,我应该用新输入更新下一行。最后我必须写入原始文件。

对于这个示例 txt,如何将“编程”一词更新为“系统信息”?

【问题讨论】:

  • 您想用括号中的内容替换单词吗?您想替换所有出现的事件,还是只替换第一个?为什么不简单地使用记事本呢?
  • 你好,Eitant。目的是更新属性的值(即下面的内容)(括号中的内容)。每当我得到带括号的行时,我应该能够更新(覆盖)该值。
  • 多一点上下文真的很有帮助。你如何解析文件?你能显示一些代码(仅相关部分)吗?
  • 抱歉错了:)
  • 那么,如果我理解正确的话,括号中的单词是属性,括号中单词下面的内容是该属性的值?但我不明白你必须替换什么以及用哪个值。请提供更多背景信息,以便我们更好地帮助您。

标签: matlab


【解决方案1】:

怎么样

function [] = updateFile( fileName, propName, newProbVal )
%
% update file fileName, replacing the value of propName with newPropVal
%
% all inputs are strings
%
rfh = fopen( fileName, 'r' ); % read handle
tname = tempname(); % temporary file name
wfh = fopen( tname, 'w' );

% read line by line
foundFlag = false;
line = fgetl( rfh );
while ischar(line)
    if foundFlag
        fprintf( wfh, '%s\r\n', newProbVal );
        foundFlag = false;
    else
        fprintf( wfh, '%s\r\n', line );
    end
    tks = regexp( line, ['^\[',propName,'\]'] );
    foundFlag = ~isempty(tks);
    line = fgetl( rfh );    
end
fclose( rfh );
fclose( wfh );
movefile( tname, fileName, 'f' ); % rename temp file name

【讨论】:

  • 你好@shai,谢谢你的反应。您的代码似乎不起作用。原始文件变为空。
  • @shai ..再次感谢您的支持。即使您进行了更正,临时文件和原始文件仍然是空的。
  • 又做了一个小的修正——希望这次我明白了。如果你可以调试这个 - 请确保循环正在执行......
  • 非常感谢。有用。还有一件事,输出似乎在一行中,我该如何转置它,以便我将有一列而不是一行。
  • 我在打印中添加了一个换行符 (\n) - 这可能会产生预期的效果。感谢您的耐心等待。
猜你喜欢
  • 2012-03-19
  • 2020-04-14
  • 1970-01-01
  • 2018-10-25
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
相关资源
最近更新 更多