精华内容
下载资源
问答
  • matlab逐行书写数据txt文件 【实测成功】 众博友们不用下载,博主仅作为储存,源代码见博主博文 https://blog.csdn.net/weixin_41529093/article/details/104791178
  • MATLAB数据编辑时,提供三种常见方法,将编辑器中的数据txt文本格式保存下来。
  • MATLAB读取显示txt格式点云(带数据)亲测可用, 谢谢支持。
  • matlab 数据保存txt

    万次阅读 多人点赞 2018-01-07 15:57:25
    (1)保存为固定名称文件: save 路径\a.txt -ascii a >> a=[1,2,3;4,5,6]; >> save C:\Users\Administrator\Desktop\a.txt -ascii a (2)保存为变量名称文件:filename=['路径\',num2str(b),'.txt'];  

    1、save

    (1)保存为固定名称文件: save 路径\a.txt -ascii a

    >> a=[1,2,3;4,5,6];
    >> save C:\Users\Administrator\Desktop\a.txt -ascii a

    (2)保存为变量名称文件:filename=['路径\',num2str(b),'.txt'];       

                             save(filename,'a','-ascii');

    a=[1,2,3;4,5,6];
    filename=['C:\Users\Administrator\Desktop\',num2str(i),'.txt'];
    >> for i=1:1:2
    save(filename,'a','-ascii');
    end

    注:数据以指数形式保存

    2、dlmwrite

    (1)保存为固定名称文件:dlmwrite('路径\a.txt',a,'delimiter','\t','newline','pc');

     a=[1,2,3;5,7,9];
    >>dlmwrite('C:\Users\Administrator\Desktop\matlab\a.txt',a,'delimiter','\t','newline','pc');

    (2)保存为变量名称文件:filename=['路径\',num2str(b),'.txt'];                                                                dlmwrite(filename,a,'delimiter','\t','newline','pc');

    a=[1,2,3;5,7,9];
    >> for b=1:3
    filename=['C:\Users\Administrator\Desktop\',num2str(b),'.txt'];
    dlmwrite(filename,a,'delimiter','\t','newline','pc');
    end
    注:dlmwrite的详细用法参考: 点击打开链接

         结果显示:

      

    3、fopen+fprintf+fclose

    fopen----将数据按照指定格式读入到matlab中

    fprintf--将数据按照指定格式写入到文本文件中

    fclose---将文本文件关闭,结束操作

    注:具体用法参考点击打开链接

    展开全文
  • matlab数据保存txt或dat格式 本文档详细说明相关技术,并给出源代码。
  • matlab数据输出保存txt 格式总结网上各大论坛,主要有三种 方法。 第一种方法 :save(最简单基本 具体的命令是:用save*.txt -ascii 为函数*.txt 为文件名,该文件传输于当前工作目录下,再开启就可以 打开后,...

    将matlab中数据输出保存为txt 格式总结网上各大论坛,主要有三种 方法。 第一种方法 :save(最简单基本 具体的命令是:用save*.txt -ascii 为函数*.txt 为文件名,该文件传输于当前工作目录下,再开启就可以 打开后,数据有也许是以指数方式保存的. 例子: =[1724 1416 1320 22 ;10 12 19 21 ;1118 25 saveaf ile.txt -ascii afile.txt 打开以后,是这种的: 1.70000 00e+001 2.40000 00e+001 1.00000 00e+000 8.00000 00e+000 1.50000 00e+001 2.30000 00e+001 5.00000 00e+000 7.00000 00e+000 1.40000 00e+001 1.60000 00e+001 4.00000 00e+000 6.00000 00e+000 1.30000 00e+001 2.00000 00e+001 2.20000 00e+001 1.00000 00e+001 1.20000 00e+001 1.90000 00e+001 2.10000 00e+001 3.00000 00e+000 1.10000 00e+001 1.80000 00e+001 2.50000 00e+001 2.00000 00e+000 9.00000 00e+000 第二种方法 :dlmwrite dlmwrite('a.t xt',a,'precision','.0f') 或者是 dl mwrite('a.txt',a,'delimiter', 网上有很多这一类似的问题,但是都不是很理想第三种方法 :fopen+fprin tf 下面主要介绍这些方式 ,可以缓解以上弊端:用fprintf 命令:以里面的事例为例: 第一种情况: a=[1724 1416 1320 22 ;10 12 19 21 ;1118 25 fopen('b.txt','wt');fprintf(fid,'%g\n',a); 换行fclose(fid); 然后用写字板打开b.txt,内容如下:为列向量 17 23 1011 24 1218 1319 25 1420 21 1516 22 第二种情况:对前面的命令做一下改动:# fopen('b.txt' fclose(fid);然后用写字板打开b.txt,内容如下:为行向量: 17 23 1011 24 1218 1319 25 1420 21 1516 22 第三种情况:综合前面的两个结果,我们编写以下命令: style="key:ih.baidu.comfi open('b.txt','wt');%写入文件路径[m,n]=size(a); endend end close(fid); 然后用写字板打开b.txt,内容如下:矩阵 17 24 1523 1416 1320 22 10 12 19 21 1118 25 说明:以上操作都是在当前的工作目录下完成!下面给出最通常的模型,大家可以试着自己操作,如果必须dat格式,直接把txt 换为dat 就可以 id=fopen('C:\Documents Settings\cleantotal.ped','wt');%写入文件路径matrix=input _mattrix %input_matrix 为待输出矩阵 [m,n]=size(matrix); id,'%g\n',matrix(i,j));else printf(fid,'%g\t',matrix(i,j)); end end end close(fid); 下面附了详细的mat lab open和fprin tf函数具 体解释,当然hel p一下是可以了解的,只是为了方 便大家 matlab open函数在选定文件开启的示例如下: open”打开文件,赋予文件代号。

    语法1:FID= FOPEN(f ilename,permission) 用指定的方法开启文件 FID=+N(N是正整数):表示文件开启成功,文件代号是N. FID=-1 表示文件开启不顺利。FID在这次文件关闭前总是有效的。 如以读形式开启,matlab 首先搜索工作目录,其次搜索matlab的其它目录,“permission”是开启模式参数。 打开方法参数由下列字符串确定: 后续写入,但不手动刷新文件的内存格式:文件开启的默认模式是:二进制。以文本模式开启,可以在形式参 数“permission”中加入“t”文件将,如“rt”,“wt+” matlab printf函数的详细使用方式案例如下: printf函数可以将数据按选定格式写入到文本文件中。其读取格式为: 数据的格式化输出:f printf(f id, ormat,variables) 按选定的格式将函数的值输出至屏幕或指定文件 id为文件句柄,若缺省,则输出到屏幕 standardoutput standarderror. omitted, output goes ormat用来指定数据输出时采取的格式 printf(fidmatlab 输出格式,f ormat,A) 说明:f id 为文件句柄,指定要读取数据的文件,f ormat 是拿来控制所写数据格式的格式符,与f scanf 函数相似,A 用来储存数据的矩阵。

    例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。 id=fopen('d:\char1.txt','w'); close(fid); id1=fopen('d:\char1.txt','rt'); id1=fopen('d:\char1.txt','rt'); stringmatlab 读txt文件 id=fopen('fx.txt','r'); %得到文件号 ,count]=fscanf(f id,'%f ',[12,90]);%把文件号1的数据读到f 中。其中f 是[12 90]的矩阵 %这里'%f close(fid); %关闭文件 另外有的txt 文件还可以用load 来开启 其语句为 =load('fx.txt)字符串操作变量 函数eval可以用来执行用字符串表示的通配符 函数deblank可以去掉字符串末尾的所有括号 函数findstr 可以用来在长字符串中查找一个短的字符串,并返回相应的位置 函数isstr可以用来判定数组是否为字符串 函数isspace可以用来判定字符串元素是否为空格符 函数lower和upper 可以把字符串中的字母转为小写格式和大写格式 函数strcat可以把多个字符串在水平方向上依次连接出来 函数strvcat可以把多个字符串按竖直方向连接起来 10. 函数strcmp 可以用来进行字符串的非常,返回1 11.函数strcmpi 可以用来忽略中文字母的大小写方式非常字符串 12. 函数strncmp 可以用来比较字符串前N个字节是否相等 13. 函数strjust 可以用来调整字符串矩阵的对齐方法 14. 函数strmatch可以用来寻找跟目标数组串匹配的行 15. 函数strrep 可以实现字符串的查找和取代功能 16. 函数strtok 可以找出字符串第一个空格符前的字符串 17. 函数texlabel可以把字符串转换成tex 软件的格式 18. 不同进制间的转换,bin2hex,bin2dec(字符串);dec2hex(数)=字符串;即十进制数不为字符串,它字节为字符串19. 函数bitget 可以用来获取二进制的数位 C=bitget(Amatlab 输出格式,bit),A 为一个无符号整形数据 20. 函数bitset 可以拿来设定某个二进制数位的值 C=bitset(A,bit) 指定数位的数值取反 C=bitset(A,bit,V)指定数位的数值被V 21.函数bitand,bitor和bitxor 可以用来进行与,或,抑或数位操作

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/jisuanjixue/article-144467-1.html

    展开全文
  • 怎样将matlab中的数据保存到.txt中?

    千次阅读 2020-12-30 18:17:54
    LOAD/SAVE主要的high level file I/O routines 是LOAD ... SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file sample_file.tx...

    LOAD/SAVE

    主要的high level file I/O routines 是LOAD 和 SAVE函数。LOAD

    可以读MAT-file data或者用空格间隔的格式相似的ASCII data. SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file sample_file.txt :

    1 5 4 16 8

    5 43 2 6 8

    6 8 4 32 1

    90 7 8 7 6

    5 9 81 2 3

    Example:

    用 LOAD and SAVE 读写数据

    CODE:

    % Load the file to the matrix, M :

    M = load('sample_file.txt')

    % Add 5 to M :

    M = M +5

    % Save M to a .mat file called 'sample_file_plus5.mat':

    save sample_file_plus5 M

    % Save M to an ASCII .txt file called 'sample_file_plus5.txt' :

    save sample_file_plus5.txt M -ascii

    UIGETFILE/UIPUTFILE

    UIGETFILE/UIPUTFILE是基于图形用户界面(GUI)的。会弹出对话框,列出当前目录的文件和目录,提示你选择一个文件。UIGETFILE让你选择一个文件来写(类似Windows ‘另存为’选项?)。用UIGETFILE,可以选择已存在的文件改写,也可以输入新的文件名。两个函数的返回值是所选文件名和路径。

    Example:

    用 UIGETFILE 从当前目录选择一个 M-file

    CODE:

    % This command lists all the M-files in the current directory and

    % returns the name and path of the selected file

    [fname,pname] = uigetfile('*.m','Sample Dialog Box')

    注意: UIGETFILE 一次只能选择一个文件。

    UIIMPORT/IMPORTDATA

    UIIMPORT是一个功能强大,易于使用的基于GUI的high level routine,用于读complex data files。文件也必须是homogeneous。

    IMPORTDATA形成UIIMPORT的功能,不打开GUI。可以将IMPORTDATA用于函数或者脚本中,因为在函数或者脚本中基于GUI的文件导入机制并不理想。下面的例子用到包含几行文件头和文本、数值数据的文件'sample_file2.txt' :

    This is a file header.

    This is file is an example.

    col1 col2 col3 col4

    A    1   4    612.000

    B    1   4    613.000

    C    1   4    614.000

    D    1   4    615.000

    Example: Using IMPORTDATA to read in a file with headers, text, and numeric data

    CODE:

    % This reads in the file 'sample_file2.txt' and creates a

    % structure D that contains both data and text data.

    % Note the IMPORTDATA command specifies a white space

    % as the delimiter of the file, but IMPORTDATA can usually

    % detect this on its own

    D = importdata('sample_file2.txt','')  % 原文有误?

    D = importdata('sample_file2.txt')

    可以通过访问结构D的数据和文本域,来看结构D中的真实值,例如输入:

    data = D.data

    text = D.textdata

    可以用UIIMPORT读同一个文件并得到同样的结构.

    注意: 对于 ASCII data, 你必须检验导入向导正确的识别了列分隔符。

    TEXTREAD/STRREAD

    TEXTREAD 是一个强大的动态high level routine,设计用来读ASCII格式的文本和/或数值数据文件。STRREAD除是从字符串而不是文件读以外,类似于TEXTREAD。

    两个函数可以用许多参数来改变其具体的工作方式,他们返回读入指定输出的数据。他们有效的提供给你一个

    “两全其美”的方法,因为他们可以用一个命令读入混合的ASCII和数值数据(high level routines的做法),并且你可以改变他们以匹配你特定的应用(如同low level routines做到的)。例子:

    CODE:

    Example 1: Using TEXTREAD to read in an entire file into a cell array

    % This command reads in the file fft.m into the cell array, file

    file = textread('fft.m','%s','delimiter','\n','whitespace','');

    CODE:

    Example 2: Using STRREAD to read the words in a line

    % This command uses the cell array created in Example 1 to

    % read in each word of line 28 in 'file' to a cell array, words

    words = strread(file{28},'%s','delimiter','')

    CODE:

    Example 3: Using TEXTREAD to read in text and numeric data from a file with headers

    % This command skips the 2 header lines at the top of the file

    % and reads in each column to the 4 specified outputs

    [c1 c2 c3 c4] = textread('sample_file2.txt','%s %s %s %s','headerlines',2)

    CODE:

    Example 4: Using TEXTREAD to read in specific rows of text and numeric data from a file

    % This command reads in rows B and C of the file. The 'headerlines'

    % property is used to move down to the desired starting row and the

    % read operation is performed 2 times

    [c1 c2 c3 c4] = textread('sample_file2.txt',...

    '%s %s %s %s',2,'headerlines',4)

    CODE:

    Example 5: Using TEXTREAD to read in only the numeric data from a file containing text and numbers

    % This command reads in only the numeric data in the file. The

    % 'headerlines' property is used to move down to the first row

    % of interest and the first column of text is ignored with the

    % '*'  operator

    [c2 c3 c4] = textread('sample_file2.txt','%*s %d %d %f','headerlines',3)

    DLMREAD/DLMWRITE/CSVREAD

    DLMREAD 和 DLMWRITE函数能够读写分隔的ASCII data,而不是用low level routines。他们比low level routines容易使用,Low level routines用几行代码实现的功能可以用DLMREAD/DLMWRITE简化成一行。

    CSVREAD用来读分隔符是逗号的文件,是DLMREAD的特殊情况。当读空格和Tab分隔的电子数据表文件时,DLMREAD特别有用。以'sample_file.txt'为例:

    CODE:

    Example 1: Using DLMREAD to read in a file with headers, text, and numeric data

    % This reads in the file 'sample_file2.txt' and creates a matrix, D,

    % with the numeric data this command specifies a white space as the

    % delimiter of the file

    D = dlmread('sample_file.txt','')

    CODE:

    Example 2: Using DLMREAD to extract the first 3 columns of the last 3 rows

    % This reads in the first 3 columns of the last 3 rows of

    % the data file 'sample_file.txt'into the matrix, D_partial.

    % 读文件 'sample_file.txt' 前3列后3行,到矩阵D_partial.

    D_partial = dlmread('sample_file.txt','',[2 0 4 2])

    CODE:

    Example 3: Using DLMWRITE to write a comma delimited file

    % This creates a file called 'partialD.txt' that consists of

    % the first 3 columns of the last 3 rows of data where each

    % element is separated by a comma

    dlmwrite('partialD.txt',D_partial,',')

    注意: 保证DLMREAD and DLMWRITE指定范围的指标从0开始,而不是从1开始。

    WK1READ/WK1WRITE

    WK1READ 用来读Lotus123 电子数据表文件的数据;WK1WRITE用来写矩阵到Lotus123 电子数据表文件。

    XLSREAD

    XLSREAD用来读Excel的数值和文本数据。

    ---------------------------------------------------------------------------------------------------------

    三. 具体例子分析:

    Matlab网站用两个例子非常详尽地介绍了各个命令的基本用法,实际中,面对手头上的数据,如何选用合适的命令呢?以下结合几个示例给出一些总结,大家举一反三就可以了:

    1. 纯数据(列数相同):

    源文件:

    CODE:

    0 3866.162 2198.938 141.140

    1 3741.139 2208.475 141.252

    2 3866.200 2198.936 141.156

    3 3678.048 2199.191 141.230

    4 3685.453 2213.726 141.261

    5 3728.769 2212.433 141.277

    6 3738.785 2214.381 141.256

    7 3728.759 2214.261 141.228

    8 3748.886 2214.299 141.243

    9 3748.935 2212.417 141.253

    10 3733.612 2226.653 141.236

    11 3733.583 2229.248 141.223

    12 3729.229 2229.118 141.186

    解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。

    2.字段名(中、英文字段均可)+数据:

    源文件:

    CODE:

    CH0 CH1 CH2 CH3

    0.000123 0.000325 0.000378 0.000598

    0.000986 0.000256 0.000245 0.000698

    解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上 Inf 或 NaN),故直接使用 importdata 便可。

    3.注释(含有独立的数字串)+数据(列数相同):

    问题:这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件

    源文件:

    CODE:

    Group 2  12.02.2006   Limei

    Samples of datas: 50000

    CH0  CH1  CH2  CH3

    0.000123  0.000325   0.000378   0.000598

    0.000986  0.000256   0.000245   0.000698

    目标文件:

    CODE:

    Group 2 12.02.2006 Limei

    Samples of datas: 50000

    CH0 CH1

    0.000123 0.000325

    0.000986 0.000256

    解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用 textread, dlmwrite 等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下:

    -------------------------------------转 ---------------------------------------------------------------------------------------

    CODE:

    clc;clear;

    fid = fopen('exp.txt', 'r');

    fid_n=fopen('ex.dat','w');

    while ~feof(fid)

    tline=fgetl(fid);

    if ~isempty(tline)

    if double(tline(1))>=48 && double(tline(1))<=57  %数值开始

    a=strread(tline);

    a(3:4)=[];

    fprintf(fid_n,'%f %f\n',a);

    clear a;

    elseif double(tline(1))==67   %字母C开始

    [b1,b2,b3,b4]=strread(tline,'%s %s %s %s');

    b=[b1{1},'  ',b2{1}];

    fprintf(fid_n,'%s\n',b);

    clear b b1 b2 b3 b4;

    else

    fprintf(fid_n,'%s\n',tline);

    end

    else

    fprintf(fid_n,'%s\n',tline);

    end

    end

    fclose(fid);

    fclose(fid_n);

    ---------------------------------------------------------------------------------

    4. 注释(不含独立的数字串)+数据(列数相同):

    源文件:

    CODE:

    你好 abc

    欢迎来到 我们

    振动论坛

    vib.hit.edu.cn

    1 11 111 1111

    2 22 222 2222

    3 33 333 3333

    4 44 444 4444

    5 55 555 5555

    解答:直接用 importdata 便可

    注:有时候注释中含有独立的数字串也可以 importdata 成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。

    5. 注释与数据混排:

    对此当然只能自己编程,举例:

    源文件:

    CODE:

    1 11 111 1111

    你好

    2 22 222 2222

    欢迎来到

    3 33 333 3333

    振动论坛

    4 44 444 4444

    vib.hit.edu.cn

    5 55 555 5555

    解答:

    --------------------------------------------转--------------------------------------

    CODE:

    function [data]=distilldata(infile)

    %功能说明:

    %将保存数据的原始文件中的数值数据读入到一个data变量中

    %使用说明:

    % infile——原始数据文件名;

    % data=数据变量

    tmpfile='tmp2.mat';

    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)

    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)

    if ~isempty(tline) % 判断是否空行

    [m,n]=size(tline);

    flag=1;

    for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)

    if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...

    |tline(i)=='e'|tline(i)=='+'...

    |(double(tline(i))>=48&&double(tline(i))<=57))

    flag=0;

    break;

    end

    end

    if flag==1 % 如果是数字行,把此行数据写入文件

    fprintf(fidtmp,'%s\n',tline);

    end

    end

    end

    fclose(fidin);

    fclose(fidtmp);

    data=textread(tmpfile);

    delete(tmpfile);

    ---------------------------------------------------------------------------------------------------------

    另外,如果要求不高,也可以使用 textread 函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释)

    6.各列数据的分离:

    源文件:

    CODE:

    0 +  47038.7   1.05  09:26:07  C

    2 +  46477.7   1.03  09:28:38  C

    4 +  44865.7   1.04  09:28:48  C

    6 +  41786.4   1.03  09:28:56  C

    8 +  39896.0   0.97  09:29:03  C

    10 +  37518.4   0.93  09:29:15  C

    12 +  35858.5   0.92  09:29:30  C

    14 +  46105.0   1.03  09:30:21  C

    16 +  46168.6   6.89  09:30:30  C

    18 +  48672.3   4.33  09:30:40  C

    20 +  49565.7   0.49  09:30:48  C

    22 +  49580.7   0.53  09:30:55  C

    24 +  49602.3   0.84  09:31:03  C

    26 +  49582.5   1.51  09:31:11  C

    28 +  49577.0   1.39  09:31:19  C

    30 +  49589.3   0.61  09:31:27  C

    32 +  49578.3   1.06  09:31:29  C

    34 +  49512.5   1.77  09:31:38  C

    解答:直接用 [a,b,c,d,e,f]=textread(yourfilename,'%d %c %f %f %s %c'); 便可

    四. 注意事项:

    1. 请在 matlab 中保持当前路径在该数据文件对应的目录下进行存取,否则,存取时请给出该数据文件的具体路径。

    2. 存取时,请给出该数据文件的全称(包括后缀名,读取mat文件时可省略)

    3. load data.txt和A=load(‘data.txt’)的区别请参阅精华贴:[原创]写给学习 matlab 的新手们

    4. 请根据读写需要来打开文件,即根据你的需要来指定 fopen 的 permission 属性为读或写。如果只用 a 进行写入,就不能用 fread 读取。此时应该写完关闭文件,然后用 r 打开读取,或者直接用 a+ 进行同时读写操作。否则,会产生莫名其妙的问题!以下代码是一个错误的例子:

    CODE:

    filename='e.dat';

    fid=fopen(filename,'a');

    if fid<0

    error('fopen error');

    end

    s=[1 2 3 4;5 6 7 8];

    fwrite(fid,s,'float32')

    [dd ll]=fread(fid,inf,'float32');%把t中的数据全部读出,即s矩阵。

    fclose(fid);

    此时得到的dd, ll 是错误且无意义的!

    五. 其他相关问题:

    1. 连续读取多个文件的数据,并存放在一个矩阵中:

    (1) 首先是如何读取文件名:

    方法一:

    filename=dir(‘*.jpg’);

    那么第i个文件的文件名就可以表示为

    filename(i).name

    文件数量为:length(filename)

    方法二:

    先在Windows的 MSDOS(命令行)中使用以下命令生成一个list.txt文件:

    dir path\folder /on /b /s > path\list.txt

    举例:dir d:\test /on /b /s > d:\list.txt

    然后在 matlab 中使用:

    filename = textread(sFileFullName,'%s');

    把所有文件名读取到list细胞矩阵中,最后对filename{i}便可得到各文件名。

    (2) 然后是读取文件名的数据并存储:

    假设每个文件对应的数据是m*n的,则:

    CODE:

    k = length(filename);

    Data = zeros(m,n,k);

    for ii = 1:k

    Data(:,:,ii) = yourreadstyle(filename{ii}); %yourreadstyle是对应的文件读取方式的函数

    end

    2. 连续读取多个文件的数据,并存放在多个矩阵(以文件名命名)中:

    假设每个文件对应的数据是m*n的,则以上述第二种文件名读取方法为例:

    CODE:

    k = length(filename);

    for ii = 1:k

    D = yourreadstyle(filename{ii});

    eval([‘Data_’, num2str(ii), ‘ = D;’]);

    end

    3. 文件名命名问题:

    文件名为 abc00001,abc00002,... abc00009,abc00010,... abc00099,abc00100,...abc00879.  准备把这些文件名给放到一个数组里面去。

    解答:

    CODE:

    a=cell(879,1);

    for k=1:879

    a{k} = sprintf('%.5d',k);

    end

    4. 上述各种文件格式、类型自动识别问题:可以利用正则表达式来处理,使之通用性较强。例如使用以下代码可以自动处理上面提到了例1到例5各种情形,不过由于存在自动判断,对某些例子(如例1)效率自然要低一点,而对于另外的例子(如例3、例5)效率估计要高一点(少用了一个循环)。

    CODE:

    function [data]=distilldata_eight(infile)

    %功能说明:

    %将保存数据的原始文件中的数值数据读入到一个data变量中(自动判断数据行)

    %使用说明:

    % infile——原始数据文件名;

    % data=数据变量

    tmpfile='tmp2.mat';

    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)

    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)

    if ~isempty(tline) % 判断是否空行

    str = '[^0-9 | \. | \- | \s | e | E]'; %正则表达式为:该行中是否包含除 - . E e 数字 和 空白字符 外的其他字符

    start = regexp(tline,str, 'once');

    if isempty(start)

    fprintf(fidtmp,'%s\n',tline);

    end

    end

    end

    fclose(fidin);

    fclose(fidtmp);

    data=textread(tmpfile);

    delete(tmpfile)

    5. 大量数据的读取问题:

    可以考虑使用循环分批读取(特别是在各数据是独立的时候),或者使用稀疏矩阵来实现(对此可以参阅本版精华贴: [原创]提高matlab运行速度和节省空间的一点心得(之三))。另外,也可参考《深入浅出MATLAB 7_X混合编程》一书第一章

    6. 读取整个txt文件的内容(获得文件中的所有字符):

    CODE:

    f = fopen('yourfilename.txt','rt'); % t 属性根据需要可省略

    x = fread(f,'*char');

    fclose(f);

    7. 把维数不同的矩阵及其变量名保存到一个 txt 文件中,例如 a1 = 123; a2 = [1 2 3;4 5 6] ,希望得到的 txt 文件如下:

    QUOTE:

    a1:

    123

    a2:

    1 2 3

    4 5 6

    如果写入的时候简单一点,则可以采用以下方式,不过读取的时候比较麻烦:

    CODE:

    a1=123;

    a2=[1 2 3;4 5 6];

    fid = fopen('myfile.txt', 'wt');

    for i=1:2

    fprintf(fid, '%s: \n %s\n', ['a',int2str(i)], mat2str(eval(['a',int2str(i)])));

    end

    fclose(fid);

    相反,如果写入的时候复杂一点,则读取的时候会简单一点:

    CODE:

    a1=123;

    a2=[1 2 3;4 5 6];

    fid = fopen('myfile.txt', 'wt');

    for i=1:2

    fprintf(fid, '%s: \n', ['a',int2str(i)]);

    b = eval(['a',int2str(i)]);

    fprintf(fid, [repmat('%d ', 1, size(b,2)), '\n'], b');

    end

    fclose(fid);

    展开全文
  • I have 3 txt files s1.txt, s2.txt, s3.txt.Each have the same format and number of data.I want to combine only the second column of each of the 3 files into one file. Before I combine the data, I sorte...

    I have 3 txt files s1.txt, s2.txt, s3.txt.Each have the same format and number of data.I want to combine only the second column of each of the 3 files into one file. Before I combine the data, I sorted it according to the 1st column:

    UnSorted file:

    s1.txt s2.txt s3.txt

    1 23 2 33 3 22

    4 32 4 32 2 11

    5 22 1 10 5 28

    2 55 8 11 7 11

    Sorted file:

    s1.txt s2.txt s3.txt

    1 23 1 10 2 11

    2 55 2 33 3 22

    4 32 4 32 5 28

    5 22 8 11 7 11

    Here is the code I have so far:

    BaseFile ='s'

    n=3

    fid=fopen('RT.txt','w');

    for i=1:n

    %Open each file consecutively

    d(i)=fopen([BaseFile num2str(i)'.txt']);

    %read data from file

    A=textscan(d(i),'%f%f')

    a=A{1}

    b=A{2}

    ab=[a,b];

    %sort the data according to the 1st column

    B=sortrows(ab,1);

    %delete the 1st column after being sorted

    B(:,1)=[]

    %write to a new file

    fprintf(fid,'%d\n',B');

    %close (d(i));

    end

    fclose(fid);

    How can I get the output in the new txt file in this format?

    23 10 11

    55 33 22

    32 32 28

    22 11 11

    instead of this format?

    23

    55

    32

    22

    10

    33

    32

    11

    11

    22

    28

    11

    解决方案

    Create the output matrix first, then write it to the file.

    Here is the new code:

    BaseFile ='s';

    n=3;

    for i=1:n % it's not recommended to use i or j as variables, since they used in complex math, but I'll leave it up to you

    % Open each file consecutively

    d=fopen([BaseFile num2str(i) '.txt']);

    % read data from file

    A=textscan(d,'%f%f', 'CollectOutput',1);

    % sort the data according to the 1st column

    B=sortrows(A{:},1);

    % Instead of deleting a column create new matrix

    if(i==1)

    C = zeros(size(B,1),n);

    end

    % Check input file and save the 2nd column

    if size(B,1) ~= size(C,1)

    error('Input files have different number of rows');

    end

    C(:,i) = B(:,2);

    % don't write yet

    fclose (d);

    end

    % write to a new file

    fid=fopen('RT.txt','w');

    for k=1:size(C,1)

    fprintf(fid, [repmat('%d\t',1,n-1) '%d\n'], C(k,:));

    end

    fclose(fid);

    EDIT:

    Actually to write only numbers to a file you don't need FPRINTF. Use DLMWRITE instead:

    dlmwrite('RT.txt',C,'\t')

    展开全文
  • Matlab中将数据保存txt或dat格式四种方案总结网上各种资源,列出以下的四种方法(以txt为例)。第一种方法:save(最简单基本的)具体的命令是:用save*.txt-asciixx为变量*.txt为文件名,该文件存储于当前工作目录下,...
  • 第一种方法:save(最简单基本的)具体的命令是:用save*.txt-asciixx为变量*.txt为文件名,该文件存储于当前工作目录下,再打开就可以打开后,数据有可能是以指数形式保存的.例子:a=[17241815;23571416;46132022;...
  • 1、保存mat数据到本地txt文件 2、读取本地txt文件 3、读取本地txt文件,并保存为mat文件 4、VS读取本地txt数据文件 5、VS保存数据到本地txt文件
  • 网上有很多这一类似的问题,但是都不是很理想,下面介绍一种方法,可以解决以上问题:用fprintf命令:以上面的例子为例:第一种情况:>>... fid = fopen('b.txt','wt');fprintf(fid,'%g\n'...
  • MATLAB保存数据txt或dat格式

    万次阅读 多人点赞 2018-07-08 21:29:10
    总结网上各大论坛,主要有三种方法。 第一种方法:save(最简单基本的) ...*.txt为文件名,该文件存储于当前工作目录下,再打开就可以打开后,数据有可能是以指数形式保存的. 例子: a =[17 24 1...
  • matlab针对txt格式保存数据的方法,主要有3种,save,dlmwrite,fopen+fprintf
  • MATLAB中获取的数据,.mat格式的文件转换为.txt格式的文件,方便使用和查看。
  • txt是文件名,该文件存储在当前工作目录中,然后在打开后可以将其打开,数据可以以指数形式保存.看下面的例子:a = [17 24 1 8 15; 23 5 7 14 16; 4 6 13 20 22; 10 1219 21 3; 11 18 25 2 9];保存afile.txt -ascii ...
  • matlab导入txt数据画图

    万次阅读 2019-02-16 12:44:59
    因为最近需要观察txt保存的一堆数据,则需要使用这些数据画图。 强大的matlab分分钟解决了。 实例 数据:data.txt 步骤: ①打开matlab -&gt; HOME(主页) -&gt; Import Data(导入数据) ②选择data....
  • matlab矩阵保存txt

    2021-04-18 12:01:53
    matlab 中如何将NxN维矩阵保存txt 文件,然后按比如这个数据在矩阵A中,那么保存成文本文件的话, save A.txt A -ascii -double A.txt就是了,不过用纯文本保存有可能损失一些精度, 如果只是在Matlab里交换数据,...
  • matlab导入txt文件数据并绘图1. 生成mat文件2. 用plot函数绘图 1. 生成mat文件 打开matlab, 这是用的是matlab R2019a 点击导入数据 找到自己想处理的的文件,打开 然后在matlab 工作区就可以看到这个mat文件,...
  • MATLAB打工目录下新建startup.m文件,把要在MATLAB打开时执行的代码放进去就行了,我的就是你可以看下:% defaultFigurePosition: [680 558 560 420]% defaultTextColor: [0 0 0]% defaultAxesXColor: [0 0 0]% ...
  • MATLAB数据保存

    2021-04-18 02:55:55
    matlab中将数据保存txt或dat格式四种方案——胡VIA:http://wenku.baidu.com/link?url=73yG51fR0-qamdeFN89OE00wIPZXw5iMTop9uokNLX6G8C4oCs3DJtgjW7AY9V2jHrtuvuXQAH9m5iCsMi_r8PAi6sMfp7eBZkQMxOLf5ZC​总结网上...
  • matlab处理txt文件数据

    千次阅读 2018-05-17 11:20:46
    read_txtfile.,mclear close all clc %load函数一般将用来导入纯数字的文件,可以是文本格式的文件... %将.txt数据读入到matlab工作空间 [m,n]=size(position); %获得数据矩阵的大小 j=1; sumx=0; sumy=0; for i...
  • matlab数据保存txt或dat格式【转】具体的命令是:用save *.txt -ascii xx为变量*.txt为文件名,该文件存储于当前工作目录下,再打开就可以打开后,数据有可能是以指数形式保存的.看下面这个例子:a =[17 24 1 8 ...
  • matlab保存矩阵成txt

    2021-04-18 12:02:20
    将删除 A 的第三列 ,得 1 2 3 4 0 A= 1 2 4 0 10 8 6 4 2 10 8 4 2 1 2 0 1 0 1 2 1 0 2 4 1 0 4 2 4 0 4 §3 命令生成使用 MATLAB 命令生成矩阵一般......matlab 的各种数据读取(txt,dat,mat 等格式) ,文件打开 ...
  • MATLAB如何保存数据(转载)

    千次阅读 2019-10-08 21:24:57
    一:存txt文件,用dlmwrite()dlmwrite 将一个矩阵写到由分隔符分割的文件中。 在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,890
精华内容 3,156
关键字:

matlabtxt保存数据

matlab 订阅