24小时热门版块排行榜    

查看: 913  |  回复: 9

keaSSy

至尊木虫 (著名写手)

[求助] MATLAB读写TXT文件数据求助 已有2人参与

本人MATLAB小白,但在用到一些txt文本数据的时候,需要将数据从一个txt文件(名叫“origin_date.txt”)以特定方式重新写入另一个txt文件(就叫“processed_date.txt”吧)中,想请论坛中熟悉MATLAB的大神请教,以提高效率。
原始数据形式如下:
TEMP*                  1                 1  12.1
TEMP*                  1                 2  12.2
TEMP*                  1                 3  12.3
TEMP*                  1                 4  12.4
TEMP*                  1                 5  12.5
TEMP*                  1                 6  12.6
TEMP*                  1                 7  12.7
TEMP*                  1                 8  12.8
TEMP*                  1                 9  12.9
TEMP*                  1               10  12.0
TEMP*                  1               11  13.1
TEMP*                  1               12  13.2
TEMP*                  1               13  13.3
TEMP*                  1               14  13.4
TEMP*                  1               15  13.5
TEMP*                  1               16  13.6
TEMP*                  1               17  13.7
TEMP*                  1               18  13.8
TEMP*                  1               19  13.9
TEMP*                  1               20  13.0
……
TEMP*                  1         30810  13.3
其中,TEMP*和1之间有18个字符;第3列数据为右对齐,相当于也占了18个字符(包含第3组中的数据值);底3、4列数据尖有两个字符。
现在需要把它处理完成后形式:
TEMP□□□□□1□□□□□□□1□□□□□□12.1
TEMP□□□□□1□□□□□□□2□□□□□□12.2
……
TEMP□□□□□1□□□□□□□10□□□□□12.0
TEMP□□□□□1□□□□□□□11□□□□□13.1
……
TEMP□□□□□1□□□□□□□30810□□13.0
其中,第1列需要把*(星号)去掉;第1列数据和第2列数据之间变为5个字符;第3列数据为左对齐,占7个字符;第4列数据为左对齐,无特殊要求。上面的“□”是代表空格,只是为了看起来方便,最终数据中都是空格。这个比较着急,希望能有人相助,深表感谢。附件为一部分数据。
回复此楼

» 猜你喜欢

你必须非常努力才能看起来毫不费力
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
https://www.mathworks.com/help/matlab/ref/textread.html
Read data from text file; write to multiple outputs

https://www.mathworks.com/help/matlab/ref/fprintf.html
Write data to text file
CODE:
The first line of mydata.dat is
Sally    Level1 12.34 45 Yes

[names, types, x, y, answer] = textread('mydata.dat', ...
'%s %s %f %d %s', 1)

CODE:
A1 = [9.9, 9900];
A2 = [8.8,  7.7 ; ...
      8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)

2楼2016-09-11 09:14:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
2楼: Originally posted by FMStation at 2016-09-11 09:14:04
https://www.mathworks.com/help/matlab/ref/textread.html
Read data from text file; write to multiple outputs

https://www.mathworks.com/help/matlab/ref/fprintf.html
Write data to text file


Th ...

我的想法是先从原始数据里面把数据分成四组,分别为x,y,z,w,然后在写进另一文件proceseed_date.txt中,但是不知道哪里出错了,二切我不知道怎么去除那个“*”(星号),求大神帮忙改一下我下面的代码,真心是不会啊
format = '%s %d %d %f';
[x y z w] = textread('origin_date.txt', format);

fid = fopen('proceseed_date.txt', 'at');
format1 = '%-9s %-8d %-7d %-f\n';
for i = 1:20
    fprintf(fid, format1, x(i,, y(i), z(i), w(i));
end
fclose(fid);
你必须非常努力才能看起来毫不费力
3楼2016-09-11 10:45:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
2楼: Originally posted by FMStation at 2016-09-11 09:14:04
https://www.mathworks.com/help/matlab/ref/textread.html
Read data from text file; write to multiple outputs

https://www.mathworks.com/help/matlab/ref/fprintf.html
Write data to text file


Th ...

不好意思,3楼的是失误,不小心把一个表情点进代码里面去了
我的想法是先从原始数据里面把数据分成四组,分别为x,y,z,w,然后在写进另一文件proceseed_date.txt中,但是不知道哪里出错了,二切我不知道怎么去除那个“*”(星号),求大神帮忙改一下我下面的代码,真心是不会啊
format = '%s %d %d %f';
[x y z w] = textread('origin_date.txt', format);

fid = fopen('proceseed_date.txt', 'at');
format1 = '%-9s %-8d %-7d %-f\n';
for i = 1:20
    fprintf(fid, format1, x(i,, y(i), z(i), w(i));
end
fclose(fid);
你必须非常努力才能看起来毫不费力
4楼2016-09-11 10:48:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mygt_hit

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
keaSSy(小红豆代发): 金币+20 2018-04-17 10:29:04
引用回帖:
4楼: Originally posted by keaSSy at 2016-09-11 10:48:35
不好意思,3楼的是失误,不小心把一个表情点进代码里面去了
我的想法是先从原始数据里面把数据分成四组,分别为x,y,z,w,然后在写进另一文件proceseed_date.txt中,但是不知道哪里出错了,二切我不知道怎么去除那 ...

如果只是将TEMP*替换为TEMP,则采用如下代码
CODE:
clear clc format = '%s %d %d %f'; [x y z w] = textread('origin_date.txt', format); fid = fopen('proceseed_date.txt', 'at'); format1 = 'TEMP %-8d %-7d %-f\n'; for i = 1:20 fprintf(fid, format1, y(i), z(i), w(i)); end fclose(fid);

如果是一般性含*的字符串,则采用如下代码,删除字符串中的*。
CODE:
clear clc format = '%s %d %d %f'; [x y z w] = textread('origin_date.txt', format); xx = x; for i = 1:size(x) xx{i} = strrep(x{i},'*',''); end fid = fopen('proceseed_date.txt', 'at'); format1 = '%-9s %-8d %-7d %-f\n'; for i = 1:20 fprintf(fid, format1, xx{i}, y(i), z(i), w(i)); end fclose(fid);

知其然,知其所以然。
5楼2016-09-11 12:20:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mygt_hit

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
月只蓝: 金币+20, 感谢应助! 2020-02-09 20:17:10
引用回帖:
4楼: Originally posted by keaSSy at 2016-09-11 10:48:35
不好意思,3楼的是失误,不小心把一个表情点进代码里面去了
我的想法是先从原始数据里面把数据分成四组,分别为x,y,z,w,然后在写进另一文件proceseed_date.txt中,但是不知道哪里出错了,二切我不知道怎么去除那 ...

问题出在x是cell数组,调用格式为x{i},而不是圆括号x(i)
知其然,知其所以然。
6楼2016-09-11 12:31:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
5楼: Originally posted by mygt_hit at 2016-09-11 12:20:00
如果只是将TEMP*替换为TEMP,则采用如下代码
clear clc format = '%s %d %d %f';  = textread('origin_date.txt', format); fid = fopen('proceseed_date.txt', 'at'); format1 = 'TEMP %-8d %-7d %-f\n'; for i  ...

好像不成功  提示“错误使用 format 输出参数太多。”
你必须非常努力才能看起来毫不费力
7楼2016-09-11 12:32:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
6楼: Originally posted by mygt_hit at 2016-09-11 12:31:58
问题出在x是cell数组,调用格式为x{i},而不是圆括号x(i)...

不是很懂 我没有MATLAB基础  对术语类的东西一窍不通  能不能麻烦您解释得简单一点
你必须非常努力才能看起来毫不费力
8楼2016-09-11 12:37:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
6楼: Originally posted by mygt_hit at 2016-09-11 12:31:58
问题出在x是cell数组,调用格式为x{i},而不是圆括号x(i)...

终于搞定了  不顾好像自己之前写的每列数据所占字符数有问题  感谢您的热心帮助
你必须非常努力才能看起来毫不费力
9楼2016-09-11 13:02:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

keaSSy

至尊木虫 (著名写手)

引用回帖:
6楼: Originally posted by mygt_hit at 2016-09-11 12:31:58
问题出在x是cell数组,调用格式为x{i},而不是圆括号x(i)...

终于搞定了  不顾好像自己之前写的每列数据所占字符数有问题  感谢您的热心帮助
你必须非常努力才能看起来毫不费力
10楼2016-09-11 13:02:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 keaSSy 的主题更新
信息提示
请填处理意见