修改一个文本文件
106(30天)
显示旧的评论
Izem
2020年9月3日
大家好,
我有一个.dat文件的图片,我想修改I3值(最后一列)。我不能用textscan以来的文件有不同的格式。
你知道我怎么能这样做呢?
![](http://www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/355714/image.png)
3评论
里克
2020年9月3日
有
许多
除了方法阅读文件
textscan
。一个简单的google搜索应该出现了。
你用的什么版本?你想写修改数据完全一样的原始文件吗?那么它可能最意义解读为文本和直接修改字符数组。
接受的答案
里克
2020年9月3日
data = readfile(文件名);
HeaderLines = 9;
δ=兰德(元素个数(数据)-HeaderLines, 1);%为这个示例生成一些随机的数据
为n = (HeaderLines + 1):元素个数(数据)
%存储在临时变量
str = {n}的数据;
%读值,添加一些,和合并
印第安纳州= strfind (str,' ');印第安纳=印第安纳州(结束)+ 1;%假设你没有一个尾随空格分隔符是一个空格
lastval = str2double (str(印第安纳州:结束));
lastval = lastval +δ(n-HeaderLines);
str = sprintf (“% s % .3f”str (1: (ind-1)), lastval);
%存储数组
{n} = str数据;
结束
%写回文件(覆盖原来的)
fid = fopen(文件名,“wt”);
流(fid检测器,“% s \ n”、数据{:});
fclose (fid)
17日评论
里克
2020年9月8日
你使用哪个版本?
如果您使用的是R2017a或稍后您将看到一个“插件”按钮的线头如果单击“回家”选项卡。如果你点击它,你会看到一个搜索框的窗口。类型readfile和回车。我应该提交的结果。点击它(名称或图标;两者都可以)。现在会看到按钮“添加从GitHub”。一旦你点击它,等待几秒钟你就会看到一个绿色的旗帜图标说“安装”。这意味着您可以使用函数。
如果你有R2016b手动或更早你必须得到它。我提供的链接在我的回答。你可以点击按钮“从GitHub下载”。这将下载的zip文件。在zip文件,你会发现
readfile.m
。把那个文件在当前文件夹,或把它在你的路径(例如,创建一个文件夹
C: \ FEX-submissions \
把
readfile.m
存在和运行
目录(C: \ FEX-sumissions \ ', ' ');
)。
告诉我你这两个选项中的一个尝试,如果出了什么问题当
readfile
。新版本可以使用第二个选项,如果你喜欢。
Izem
2020年9月8日
抱歉再次打扰你,我有另一个问题。
实际上同样的m和n,校正是一样的所以我修正列表的大小不如比文本文件的行数(没有headerlines)。例如,正如你所看到的图片,前5行,从m = 0和n = 1只有一个相应的调整,应在最后一列添加到所有五个值的文本文件。
我已经试着转换数据{n} num然后比较一分之二值但当我回到str修改后,我不觉得exactely相同的格式(有很多空格)你知道我如何能做到这一点吗?
![](http://www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/357907/image.png)
Izem
2020年9月8日
我认为你没有得到我的请求。其实,我要求发出召唤不是我想要的,你的解决方案工作完美的根据我问发出召唤。但是现在,我想修改alogithm这样同样的m和n,添加值,最后一列是相同的比如:
m = 0和n = 1
I3
96年,84 + val1
91.04 + val1
89.75 + val1
84.36 + val1
83.96 + val1
里克
2020年9月8日
我理解你。你只需要找到一个方法来提取m和n的值从一行和使用那些找到您想要添加价值。所以你怎么尝试找到m和n ?m和n保证一位数整数吗?这将使它更容易,尽管你也可以只使用
textscan
在单个行。
里克
2020年9月8日
谁教你
str2num
吗?追溯到至少R2011a你可以阅读选择的建议
str2double
代替。我不认为只有一个路要走,但是
str2num
当然是选择比吗
textscan
。
你用的什么版本?
里克
2020年9月8日
你应该阅读文档。这是Matlab的主要好处之一。对于这个特定的问题:你可以很容易地得到的值
米
和
n
:
数据= readfile (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/357712/Matlab.txt”);
str ={10}数据;%选择第一行显示的例子
瓦尔斯= textscan (str,' % f % f % % % f % f % f ');
瓦尔斯瓦尔斯m = {1}; n = {2};
Izem
2020年9月9日
这是我所做的和它工作得很好但有坏编程吗?
为我= (HeaderLines + 1):元素个数(数据)
%存储在临时变量
如果{我}isempty(数据),继续,结束
str ={我}数据;
瓦尔斯= textscan (str,' % f % f % % % f % f % f ');
瓦尔斯m = {1};n = vals {2};
为j = 1:长度(修正)
如果m = = str2double (mcorrection (j)) & & n = = str2double (ncorrection (j))
%读值,添加一些,和合并
印第安纳州= strfind (str,' ');印第安纳=印第安纳州(结束)+ 1;%假设你没有一个尾随空格分隔符是一个空格
lastval = str2double (str(印第安纳州:结束));
lastval = lastval +校正(j);
str = sprintf (“% s % .3f”str (1: (ind-1)), lastval);
%存储数组
{我}= str数据;
结束
结束
结束
%写回文件(覆盖原来的)
fid = fopen(新名称,“wt”);
流(fid检测器,“% s \ n”、数据{:});
文件关闭(fid);
里克
2020年9月9日
我会单独发现的值校正和使用它。我也不会使用
我
和
j
作为变量。你也可以考虑使用
ismember
和/或
找到
。一个可能的优化将转换
mcorrection
和
ncorrection
数组只有一次翻倍(外环)。
所以,我看不出有任何的不好的编程。
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。