精华内容
下载资源
问答
  • Matlab 文本处理

    2015-08-07 00:26:20
    文本文件与二进制文件的区别 文本文件的每一个字节的最高位都为0,而二进制文件将所有位都用上了. 以文本方式打开文件时会对每个字节做转换,将字节转成ASCII码,而以二进制文件打开时不会做任何转换.

    文本文件与二进制文件的区别
    文本文件的每一个字节的最高位都为0,而二进制文件将所有位都用上了.
    以文本方式打开文件时会对每个字节做转换,将字节转成ASCII码,而以二进制文件打开时不会做任何转换.

    展开全文
  • Matlab 文本处理函数

    千次阅读 2012-01-08 14:30:21
    文本文件 Matlab中对文件的读写函数可以分为2大类:高级函数和低级函数。简单的说,高级函数的调用语法简单,方便使用;但是可定制性差,只适用某些特殊格式的文件类型,缺乏灵活性。 在实际的使用中,很多人会...

    Matlab提供多种能够进行文件读写的函数,这些函数是Matlab语言的一部分,并不需要任何额外的工具箱的支持。

    文本文件

    Matlab中对文件的读写函数可以分为2大类:高级函数低级函数。简单的说,高级函数的调用语法简单,方便使用;但是可定制性差,只适用某些特殊格式的文件类型,缺乏灵活性。

    在实际的使用中,很多人会推荐这样的一种选择原则:在读取文件时,尽量使用高级函数;在存写文件时尽量使用低级函数,因为高级函数存写文件时,文件的格式比较单一。

    高级命令

    常用的文本文件读写的高级函数包括以下8个:

    (1) 读:load

    load是Matlab中的一个内置函数。其主要功能是从文本文件或者MAT文件中把数据输入Matlab工作空间。

    如果各行的列数不相等,会出错。

    load的调用方式可以分为2种:

    命令形式:

    load bar.dat

    函数形式:

    [x] = load('bar.dat');

    (2) 读:importdata

    适合从文本文件或者特殊格式的二进制文件(比如.WAV等)中读取数据。importdata可以读取包含文字说明的文件,可以使用用户自定义的字符作为文件中每行各数据之间的分隔符,如不指定,自动以空格作为分隔符。如果各行的列数不同的话,importdata不会终止执行,而是会根据第一行的列数为准来决定输出矩阵的大小,所缺的列会以NaN代替。

    (3) 读:csvread

    用来读取用逗号隔开的数据文件。

    (4) 读:strread

    (5) 读:dlmread

    文件中不能包含说明文字。不过dlmread不但可以读取以逗号分割的数据文件,也可以读取那些用其它字符分割数据的文件。

    (6) 读:textread

    通过调用一个名为dataread.dll的MEX文件实现的。比前面提到的几个文件读取高级函数,textread同样具有调用语法简单的优点,同时对文件读取的可定制性更强。textread既能处理有固定格式的文件,也能处理无格式的文件,还能对文件每行的数据按列逐个读取。通常被用来处理一些已知格式的文件。{姓名,等级,X,Y,答案}

    Note: textread will be removed in a future version. Use 'textscan' instead. (Matlab 2011a)

    (7) 写:save

    save也是Matlab的一个内置函数,用来把当前Matlab工作空间的一个或者多个变量存入外部文件。在默认情况下,save命令以MAT格式存写数据,但也可以指定存写的文本方式。

    注意:save无法在文本文件中,保存复数变量。如果有复数时,save只保存它们的实部。另外,对于结构型变量,save只能保存结构型标量,而不能保存结构型变量数组。

    '-mat'             Binary MAT-file format (default).

    '-ascii'            8-digit ASCII format.

    '-ascii', '-tabs'                     Tab-delimited 8-digit ASCII format.

    '-ascii', '-double'                  16-digit ASCII format.

    '-ascii', '-double', '-tabs'        Tab-delimited 16-digit ASCII format.

    For more flexibility in creating ASCII files, use 'dlmwrite' or 'fprintf'. (Matlab 2011a)

    (8) 写:dlmwrite

    Write matrix to ASCII-delimited file


    低级命令

    这些命令和C语言里对文件的读写函数非常类似。操作过程一般包括:打开文件;读写文件;关闭文件。

    常用的文件读写低级命令有如下7个:

    (1) fopen

    fopen能够打开文件,也能够从打开的文件中获得信息。默认情况下,fopen以二进制格式打开文件。

    注意:如果文件打开模式里用“+”,如“a+t”、“w+t”等,对文件的读和写必须用fseek或者frewind隔开。

    (2) fclose

    文件打开、使用后最好关闭,以方便对该文件的其他操作。使用fopen打开文件以后,系统会把这个文件标记为"正在使用";使用fclose会清除这个标记,否则会影响到对文件的修改、删除等操作。

    (3) fgetl

    能够读取指定文件中的一行内容,但不包括新行分隔符。用fopen打开文件后,文件的读取位置是文件开头的地方,以后每次调用fgetl,这个读取位置会自动更新到下一行,一直到文件结尾的地方。

    (4) fgets

    fgets的功能和fgetl类似,都是读取当前文件读取位置所对应的下一行内容。区别在于,fgets将包含该行的新行标志。

    (5) fscanf

    fscanf具有更多的灵活性,能够读取有格式的文本文件。

    注意:用%s读取字符串后,其中的每个字符会被看成是返回的矩阵里的一个元素。而且,%s会忽略文件中的空格键。如果需要读取空格,则必须用%c。

    (6) textscan

    textscan是Matlab 7.0新增加的内置函数。它能够更为高效和灵活地读取文本文件数据,其和高级命令textread相似,但textcan能够更好地处理大型文件。textscan能从文件的任何地方开始读取数据,对于数据的转换,textscan提供了更多的选项。

    注意:textscan读取数据最大值uint32(4294967295),文件中相应的数字如果大于这个数,则被这个极限数字代替。

    (7) fprintf

    fprintf能够以类似于ANSI C语言中的有关函数那样按照用户指定的格式把数据打印文本信息。根据调用参数的不同,fprintf可以在文件或者屏幕上输出结果。

    Write data to text file

    展开全文
  • matlab 文本处理

    千次阅读 2016-07-21 00:06:17
    1. textread()以字符串的形式组织每一行:>> textread('**.txt', '%s', 'delimiter', '\n')

    1. textread()

    以字符串的形式组织每一行:

    >> textread('**.txt', '%s', 'delimiter', '\n')

    2. fread()

    fid = fopen()
    fread(fid, 10, '*char')
    展开全文
  • matlab处理txt文本文件

    2021-04-18 08:44:07
    二进制文件与文本文件的区别:将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都...

    一. 基本知识:

    1. 二进制文件与文本文件的区别:

    将文件看作是由一个一个字节(byte) 组成的,

    那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。

    从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:

    ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:

    ASCII码: 00110101 00110110 00110111 00111000

    ↓ ↓ ↓ ↓

    十进制码: 5     6  7  8

    共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。

    二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110 00101110

    只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。

    2.

    文本模式(textmode)和二进制模式(binarymode)有什么区别?

    流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"\r\n"序列转成"\n",在写入时把"\n"转成"\r\n"

    )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。

    注:

    \n一般会操作系统被翻译成"行的结束",即LF(Line-Feed)

    \r会被翻译成"回车",即CR(Cariage-Return)

    对于文本文件的新行,在UNIX上,一般用\n(LF)来表示,Mac上用\r(CR)来表示,

    Windows上是用\n\r(CR-LF)来表示。

    通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。如果用文本方式打开二进制文件,会把“0D 0A”自动变换成“\n”来存在内存中。写入的时候反向处理。而二进制方式打开的话,就不会有这个过程。但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

    上述基础其实大可以略过,简言之,对用户来说:在 matlab

    中存储成为二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制文件,这样用记事本打开会出现小黑方块,要正常显示的话,可以用写字板或UltraEdit等工具打开。

    二.

    Matlab的I/O文件操作使用技巧和总结:

    1. Matlab

    支持的I/O文件(对应“取/存”操作)类型:(所有文件I/O程序不需要特殊的工具箱)

    (注:从上表可以看到,matlab不支持doc格式的文档存取(因为doc文档包含很多格式控制符),请改用txt或者dat格式)

    2. Matlab 的I/O文件指南:

    以下是部分对应的中文译文:

    本技术支持指南主要处理:ASCII, binary, and MAT files.

    要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令:

    help iofun

    MATLAB中有两种文件I/O程序:high level and

    low level.

    High level routines:

    包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。

    Low level routines: 可以更加灵活的完成相对特殊的任务,需要较多的额外编程。

    High level routines 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。

    举个例子,如果你有一个包含数值和字母的文本文件(text file)想导入MATLAB,你可以调用一些low level

    routines自己写一个函数,或者是简单的用TEXTREAD函数。

    使用high level

    routines的关键是:文件必须是相似的(homogeneous),换句话说,文件必须有一致的格式。下面的段落描述一些high

    level file I/O routines并给出一些例子帮助理解概念。

    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 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 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开始

    =strread(tline,'%s

    %s %s %s');

    b=;

    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) %

    判断是否空行

    =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:\list.txt

    然后在 matlab 中使用:

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

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

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

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

    CODE:

    k = length(filename);

    Data = zeros(m,n,k);

    for ii = Data(:,:,ii) =

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

    end

    2.

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

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

    CODE:

    k = length(filename);

    for ii = D = yourreadstyle(filename{ii});

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

    end

    3. 文件名命名问题:

    文件名为 abc00001,abc00002,... abc00009,abc00010,...

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

    解答:

    CODE:

    a=zeros(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文本处理系统的设计与实现.pdf
  • MATLAB读取文本数据处理

    千次阅读 2017-08-30 17:31:46
    最近接到了一个小任务,具体要求是计算某地19km和21km高度的风速...考虑到MATLAB具有强大的数据处理能力,因此用MATLAB完成了这个题目,程序如下: %function [daysouth,daynorth,nthvec,sthvec,nthstd,sthstd,nsvec,
  • matlab文本文件操作

    万次阅读 2017-10-28 14:40:44
    matlab 环境下操作文本文件文本文件简介众所周知,计算机中所有的信息是以二进制的方式存在。而计算机中的文件主要以两种方式存在,即二进制文件和文本文件。文本文件有字符组成而字符由相应的编码确定的二进制数据...
  • matlab中的文本处理

    2021-04-22 01:53:44
    Read text into string cell array:[app_file, group_file] = textread(strcat(basic_folder, 'matching_app_to_group.csv'), '%s%s', 'delimiter', ',');if ismember(app_file(index), app_name)group_name = char...
  • 基于 matlab文本处理系统的设计与实现 费 扬,杜庆治* (昆明理工大学 信息工程与自动化学院,云南 昆明 650504) 摘 要:为了进行关键词的文本查重和文本检索,设计出基于 matlab文本处理系统。首先,研究...
  • 本文简单介绍处理文本文件的第一步——导入文本文件到Matlab。 文章目录1 文本文件2 读取文本文件2.1 fscanf2.2 fileread3 写入文本文件4 总结 1 文本文件 会用电脑的人对文本文件都不陌生。能通过记事本或者Notepad...
  • 29.MATLAB NLP 文字工具箱简单文本分析

    千次阅读 2020-03-29 17:35:05
    官方教程Create Simple Text Model for Classification 1.词频直方图统计: categorical创建分类数组 histogram用法 data.event_type = categorical(data.event_type);前后data.event_type变化: ...
  • matlab 写入txt文本

    2018-09-10 16:23:02
    matlab写入txt文本,实现了数据字头接入,可以换行 汉字输入,适合批量实验数据处理
  • 使用MATLAB实现对Excel文档数据的读取和使用,提供MATLAB原始代码
  • 1、我是新建了一个MATLAB的函数reading_txt.m存放代码2、首先通过dir获取目标目录下所有txt文件的文件名,存放于namelist数组中。3、构建元胞数组存放文件名4、构建元胞数组存放点。function [ len,var ] = reading_...
  • Matlab中渲染3D形状以进行形状处理出版物。 渲染很难! 在形状处理领域,通常需要在3D形状上显示函数值,分割或特征点。 ,并非所有研究人员都具备必要的知识,艺术技能以及额外的时间来制作美观的效果图。 该程序...
  • 原创matlab读取txt中文文本的解决方案-程序.rar matlab对中文的支持一直以来都是个不小的问题,尤其在读取文本方面。一般读出的中文文本都是乱码,网上找了半天没找到答案,自己研究了一下,在快要绝望的时候终于...
  • MATLAB数字图像处理.pdf

    2019-11-28 20:58:06
    图像是一种重要的信息源,图像处理的最终目的就是要帮助人类理解信息的内涵。数字图像处理技术的研究内容涉及光学系统、微电子技术、计算机科学、数学分析...应用于图像处理的计算机软件技术平台很多,如VC++、MATLAB
  • matlab工具箱

    2018-09-27 19:03:07
    很实用的教程,适合初学者系统学习应用,学起来非常清晰
  • 图像提取中的文本
  • 基于matlab文本处理系统的设计与实现
  • MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、...
  • MATLAB实现txt文本数据分离的源程序代码.rar MATLAB实现不同插值方法的GUI界面设计 源程序代码.rar MATLAB实现偏微分方程的差分计算 源程序代码.rar MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar MATLAB实现...
  • matlab处理lvm格式文本

    2021-04-23 11:26:43
    clc;clear all;N=256;Fs=25600;row_num_first=100;% [s_0]=textread('0.lvm','%s');% figure(1)% s_0=str2double(s_0(row_num_first:24000,1));% plot(s_0)% xlabel('simple');ylabel('amplitude');...
  • 转自:http://blog.sina.com.cn/s/blog_5d4e4aad0100bj4y.html在MATLAB中,来读取和写入文本文件是很简单的事。下面,就来简单介绍下。如果有其他问题,请留言。一、读取文本文件思路:1、用fopen来打开一个文件句柄...
  • 基于词性分析预处理的文本聚类,其不同于传统的基于停用词表预处理的文本聚类,前者在建立VSM模型的速度上要比后者快。
  • 可以用于各种数据挖掘和信息检索任务的matlab工具箱,利用matlab中稀疏矩阵这种结构,尤其适合于文本挖掘应用。
  • MATLAB读取文本文件----textread

    万次阅读 2019-08-02 21:23:42
    读取文本文件中的数据;写入多个输出 注意 不推荐使用textread。请改用textscan。 语法 [A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) [...] = textread(...,param,value...
  • 由图像转换成txt文本.m 以及将txt文本转换城图像.m
  • 基于MatLab文本模糊聚类分析及应用.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,168
精华内容 6,867
关键字:

matlab文本处理

matlab 订阅