精华内容
下载资源
问答
  • matlab读取文件操作函数

    千次阅读 2019-08-23 21:23:59
    Move to specified position in file,移到文件的某一个特殊位置 二:语法 status = fseek(fileID, offset, origin) fileID的意思是fopen打开时产生的整数标识,大于0时,表示文件成功打开。 在文件中,offset是...
    1. fid=fopen(‘文件路径’,‘打开方式’);返回值为文件句柄;
    2. [A Count]=fread(fid,size,precision),A:存放读取到的数据,count:读取的数据元素个数,size:读取的字节数目,precision表示读取的数据类型;
    3. status=fseek(fid,offset,origin),定位文件位置指针,fid为句柄,offset为位置指针相对移动的字节数,正数表示向尾部移动,负数表示向头部移动,origin为指针移动的参照位置,‘cof’‘bof’ 'eof’表示当前,开始以及结束位置(current,begin,end),返回值为0表示定位成功,否则返回-1;
    4. sizefile = ftell(fid); %返回从文件开始到指针当前位置的字节数
    展开全文
  • Matlab读取Excel文件相关操作及示例1Matlab文件夹相对路径设置lCd函数功能:Change current folderSyntax:cd(newFolder)oldFolder = cd(newFolder)cdDescriptioncd(newFolder) changes the current folder to the ...

    Matlab读取Excel文件相关操作及示例

    1 Matlab文件夹相对路径设置

    l Cd函数功能:Change current folder

    Syntax:

    cd(newFolder)

    oldFolder = cd(newFolder)

    cd

    Description

    cd(newFolder) changes the current folder to the string

    newFolder.

    oldFolder = cd(newFolder) returns the existing current

    folder as a string to oldFolder, and then changes the

    current folder to newFolder.

    cd displays the current folder.

    The newFolder string can be:

    · A full or relative path.

    · ../, which indicates one level up from the current

    folder.

    · Multiple strings of ../, which indicates multiple levels

    up from the current folder.

    · ./, which indicates a path relative to the current folder,

    although without the ./, cd assumes that the path

    is relative to the current folder.

    l pwd: PWD Show (print) current working

    directory.

    PWD displays the current working directory.

    S = PWD returns the current directory in the string S.

    2 文件夹下的文件识别

    %%%%%% 读取Excel文件

    dirs=dir('c:\*.sys'); %

    用你需要的目录以及文件扩展名替换。读取某个目录的指定类型文件列表,返回结构数组。

    dircell=struct2cell(dirs)' ; %

    结构体(struct)转换成元胞类型(cell),转置一下是让文件名按列排列。

    filenames=dircell(:,1) % 第一列是文件名

    3 Excel文件读取说明

    l 读Excel文件(相关说明:doc xlsread)

    l 写Excel文件(相关说明:doc xlswrite)

    l 注:在写Excel文件时,每使用一次xlswrite,Excel文件都需要保存一次;若文件比较大,写的速度会很慢。为避免每次保存,可改写系统函数,等所有写的数据写好后,再进行保存,见以下Excel代码:

    function

    [WriteTime]=MyXlsWrite(FileName,data,SheetNames,range,FileSave)

    % % 参考系统函数xlswrite,将数据批处理写入Excel文件中:

    % % 主要功能:在不关闭Excel文件时,将所有数据写入到Excel中,减少读写时间。

    % %

    --------------------输入变量-----------------------------------

    % % FileName:Excel文件,绝对路径\;

    % % data:拟写入的数据集合:NumSheet×NumRange;

    % % SheetNames:写入的工作表名:NumSheet×1;

    % % range:写入的单元格集合:NumRange×1;

    % %

    --------------------输出变量----------------------------------

    % % WriteTime:整个写入操作的时间;

    % China

    Fisherli

    % Copyright

    1995-2011,YXQH

    % $Revision:

    1.1$ $Date: 2011/08/18/ 14:20:03 $%

    %%%%%%%% 1.启动Excel服务器和文件

    tic

    Excel = actxserver('Excel.Application');

    set(Excel, 'Visible', 0);

    Workbooks = Excel.Workbooks;

    Workbook = invoke(Workbooks, 'Open',FileName);

    WorkSheets = Excel.ActiveWorkBook.Sheets;

    NumSheet=numel(SheetNames);

    NumRange=numel(range);

    %%%%%%%% 2.写入文件

    for i1=1:NumSheet

    i1

    SheetName=SheetNames{i1,1};

    % Get name

    of specified worksheet from workbook

    try

    TargetSheet = get(WorkSheets,'item',SheetName);

    catch

    % Worksheet does not exist. Add worksheet.

    TargetSheet = addsheet(WorkSheets,SheetName);

    end

    % activate

    worksheet

    Activate(TargetSheet);

    Activesheet

    = Excel.Activesheet;

    for

    i2=1:NumRange

    % % %

    % tt=toc

    mydata=data{i1,i2};

    myrange=LjwRange([range{i2,1},size(mydata)]);

    Range = get(Activesheet, 'Range', myrange);

    set(Range, 'Value', mydata);

    end

    end

    %%%%%%%% 3.文档保存以及运行信息

    if nargin==5

    if

    ~exist(FileSave,'file')

    invoke(Workbook, 'SaveAs',FileSave);

    else

    error('文件已存在,请删除再操作!');

    end

    end

    if nargin==4

    Workbook.Save

    end

    Workbook.Close(false) % Close

    Excel workbook.

    invoke(Excel, 'Quit');

    delete(Excel);

    WriteTime = toc;

    %%%%%%%%%%%%%%%%%%%% 子程序

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function newsheet = addsheet(WorkSheets,Sheet)

    if isnumeric(Sheet)

    %

    iteratively add worksheet by index until number of sheets ==

    Sheet.

    while

    WorkSheets.Count < Sheet

    % find last sheet in worksheet collection

    lastsheet = WorkSheets.Item(WorkSheets.Count);

    newsheet = WorkSheets.Add([],lastsheet);

    end

    else

    % add

    worksheet by name.

    % find last

    sheet in worksheet collection

    lastsheet =

    WorkSheets.Item(WorkSheets.Count);

    newsheet =

    WorkSheets.Add([],lastsheet);

    end

    % If Sheet is a string, rename new sheet to this

    string.

    if ischar(Sheet)

    set(newsheet,'Name',Sheet);

    end

    function XlsRange=LjwRange(RectRang)

    %%%%%%% 用于Excel单元格的产生

    %%%

    %%%%%%%% 第1步:赋值

    FirstRow=RectRang(1);

    FirstCol=RectRang(2);

    NumRow=RectRang(3);

    NumCol=RectRang(4);

    EndRow=FirstRow+NumRow-1;

    EndCol=FirstCol+NumCol-1;

    %%%%%%%% 第2步:将10进制数字转化成26进制

    XlsRange=[Ten2NDec(FirstCol,26),int2str(FirstRow),':',...

    Ten2NDec(EndCol,26),int2str(EndRow)];

    function Res=Ten2NDec(Int0,N)

    %%%%

    Res=[];

    a=Int0;

    while floor(a/N)>0

    b=mod(a,N);

    a=floor(a/N);

    if b==0

    Res=['Z',Res];

    else

    Res=[char(64+b),Res];

    end

    end

    b=mod(a,N);

    Res=[char(64+b),Res];

    4 Matlab、Excel、SQL中的日期的数字序列形式及实现

    如果一个日期(或者时间),如果用字符串,比如"2010-10-04"的形式,各个系统都没有什么区别。在某些时候,将日期用数字表示,将大大增加对日期查找、比较的效率。而如果用数字来表示日期,在不同的系统之间差别就大了。

    比如2010年10月4日,在Excel中为40455,在Matlab中为734415,在SQL里为40453。

    事实上,当一个日期被转化为数字时:

    l Matlab中为它到0000-01-00的天数;

    l SQL中为它到1900-01-01的天数;

    l Excel的日期是很奇怪的东西,它和SQL都是微软出品,按照官方文件的说法,它们的算法是一样的。而事实上,它们相差了两天,原因在于首先,Excel中日期对应的数为它到1900-01-00的天数;其次,Excel中日期序列多了一个不存在的日期

    ’1900-02-29',它是Excel早期设计中由于为了保持与Lotus

    1-2-3兼容性特意这么设计的(而最开始Lotus这么设计则是为了编程简单)。

    故对于一般的日期(1900-03-01以后)有以下关系式:

    l Matlab_datetime = Excel_datetime +

    693960;

    l SQL_datetime = Excel_datetime - 2;

    l Matlab_datetime = SQL_datetime + 693962;

    在Matlab和Excel之间交换日期数据时,可以直接用上面的公式,也可以考虑用下面的mdatestr代替datestr,它会自动分辨是Matlab系统中的日期数据还是Excel系统中的日期数据。

    在Matlab中读取Excel数据的说明如下:

    %%%%%%% 将Excel的日期时间转化成Matlab数值

    [t0,t1,t2]=xlsread(XlsName,SheetName,TimeRange);

    %%%%%% 采用日期时间标准型:yyyy-mm-dd hh:mm:ss

    t0=datenum(t2,31)-693960;

    图 1 Matlab日期时间格式约定

    PS:按照Excel中的用数字表示日期的方法,在字符串形式和数字形式的日期之间互相转化,比Matlab自带的datestr和datenum要快5到10倍。

    同时,在SQL读取日期数据的时候需作如下处理:

    % 读入日期数据到matlab中

    select CONVERT(float, mydate) + 693962

    % 读入日期数据到Excel中

    select CONVERT(float, mydate) + 2

    5 读取Excel文件程序示例

    %%

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%% 一、读取Excel文件

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%%%%% 1、获得文件夹下的文件名

    clc,clear

    tic

    DataRoot='D:\兴业期货工作文档\宏观因子预测系统构建20110831\Data\';

    dirs=dir([DataRoot,'*.xlsx']); %%

    用需要的目录以及文件扩展名替换。读取某个目录的指定类型文件列表,返回结构数组。

    dircell=struct2cell(dirs)'; %% 结构体(struct)转换成元胞类型(cell),转置一下是让文件名按列排列。

    filenames=dircell(:,1); %% 第一列是文件名:默认情况;按照文件名排序

    NumFile=numel(filenames)-1;

    %%%%%%%%

    2、读取统一格式的指标数据:8个Excel指标文件,第一个是Readme,其它具有相似结构

    MyData0=cell(8,1);

    for i1=1:NumFile

    %%%%

    获取Excel文件信息

    XlsName=[DataRoot,filenames{i1,1}];

    [status,sheets] = xlsfinfo(XlsName);

    NumSheet=numel(sheets)-1; %% 多一个readme

    MyData=cell(1,NumSheet);

    for

    i2=1:NumSheet

    %%%% 日期数据→转换成Excel标准数据

    [t0,t1,t2]=xlsread(XlsName,i2+1,'A3:A10000');

    t0=datenum(t1,'yyyy-mm-dd')-693960; %% 采用日期时间标准型:yyyy-mm-dd

    %%%% 数据+8列指标数据

    aa=xlsread(XlsName,i2+1,'B3:T10000');

    MyData{1,i2}=[t0,aa(:,3:2:end)];

    end

    MyData0{i1,1}=MyData;

    end

    %%%%%%%% 3、读取沪深300指数

    [t0,t1,t2]=xlsread(filenames{9,1},1,'A4:A10000');

    t0=datenum(t1,'yyyy-mm-dd')-693960; %% 采用日期时间标准型:yyyy-mm-dd

    %%%% 数据+8列指标数据

    aa=xlsread(filenames{9,1},1,'B4:B10000');

    YData=[t0,aa(:)];

    %%%%%%%% 4、保存数据到mat文件中

    save ResIndexData0921 MyData0 YData

    sprintf('\nCongratulations!')

    toc

    展开全文
  • 一、对于当前路径下的文件或文件夹的访问>> files = dir('bill.txt') %dir为访问文件的函数此处访问当前路径下的文件 files = 包含以下字段的 struct: ... folder: 'D:Matlab_file' date: '0...

    324bb2c97c476f58a8a9ef90653c770d.png

    一、对于当前路径下的文件或文件夹的访问

    >> files = dir('bill.txt')    %dir为访问文件的函数此处访问当前路径下的文件
    
    files =                       
    
      包含以下字段的 struct:
    
           name: 'bill.txt'
         folder: 'D:Matlab_file'
           date: '04-8月-2019 10:37:52'
          bytes: 28
          isdir: 0
        datenum: 7.3764e+05
    
    >> files.name              %files为一个结构数组,存储了bill.txt的各种属性
    
    ans =
    
        'bill.txt'
    
    >> files_a = dir('abc')  %此处abc为当前路径下的一个文件夹
    
    files_a = 
    
      包含以下字段的 2×1 struct 数组:
    
        name
        folder
        date
        bytes
        isdir
        datenum
    
    >> files_a(1).name    
    ans =
    
        '.'

    注意:对于当前文件夹可以进行修改,可以在命令行窗口上面的地址栏中输入需要设置为当前文件夹的地址回车。不过该方法较为繁琐,每次重启matlab之后又会回到c盘中matlabbin中。

    二、对txt文本数据的读写

    (1)对txt文件的读取

    %w     张三      李四
    0.13      45        88 
    0.05      98        48
    0.23      45        99
    0.43      76        35

    使用下列代码对于上述txt文件读入

    >> A = load('score.txt')
    
    A =
    
        0.1300   45.0000   88.0000
        0.0500   98.0000   48.0000
        0.2300   45.0000   99.0000
        0.4300   76.0000   35.0000

    对于字符串的读入load无法实现只能使用fopen函数,如下所示

    >> a = load('bill.txt','w')
    错误使用 load
    ASCII 文件 bill.txt 的行号 1 中的文本未知

    下面为一个名为billl.txt 的文件

    chenwenliang
    wangwenliang

    使用下列代码读入上述文件

    其中fopen()函数用来读取文件,fgeil()函数用来依次读取每一行数据

    当文件读完之后返回-1

    >> fid = fopen('bill.txt','r')
    
    fid =
    
         3
    
    >> t1 = fgetl(fid)
    
    t1 =
    
        'chenwenliang'
    
    >> t2 = fgetl(fid)
    
    t2 =
    
        'wangwenliang'
    >> t3 = fgetl(fid)
    
    t3 =
    
        -1
    

    二、对txt文件的写入

    >> fid = fopen('bill.txt','a+');
    >> fprintf(fid,'matlab is a useful tool');
    %%上行代码中'a+'的意思是在原来文本后面继续添加

    与上面'a+'有同类效果的如下

    • r 读出
    • w 写入(文件若不存在,自动创建)
    • a 后续写入(文件若不存在,自动创建)
    • r+ 读出和写入(文件应已存在)
    • w+ 重新刷新写入,(文件若不存在,自动创建)
    • a+ 后续写入(文件若不存在,自动创建))
    • w 重新写入,但不自动刷新
    • a 后续写入,但不自动刷新

    三、读写dat文件

    filename = 'bet.dat';
    fid = fopen(filename,'r')   %此处为打开明为filename的dat文件
    tline = fgetl(fid);         %此处fget函数同上,为依次读取每一行字符
    tline = fgetl(fid);
    fclose(fid)

    四、excel文件的读写

    excel文件读取的标准结构为

    data = xlsread('…… .xls/…… .xlsx','sheet1/sheet2/自定义标签名','A1:B2') 不可省略

    '…… .xls/…… .xlsx' :该处为表名加后缀,excel2007之前为xls excel2007之后为xlsx

    'sheet1/sheet2/自定义标签名' :该处为表单名,一般默认有三个sheet1,sheet2,sheet3

    省略默认为sheet

    'A1:B2' :此处为需要读取的范围 省略则为全部

    excel文件写入的标准结构是

    xlswrite(' .xlsx'{'T','W'},'sheet1','B1:C1')

    五、图像的处理

    图像的读入需要调用imread()函数

    size()函数可以读取图像的像素大小

    image()函数可以在图框中显示图像

    >> pic = imread('yase.jpeg');
    >> size(pic)
    
    ans =
    
       487   829     3
    
    >> image(pic)

    六、视频数据的读入

    >> obj = VideoReader('liyugang.mp4')
    
    obj = 
    
      VideoReader - 属性:
    
       常规属性:
                Name: 'liyugang.mp4'
                Path: 'D:Matlab_file'
            Duration: 200.2333
         CurrentTime: 0
                 Tag: ''
            UserData: []
    
       视频属性:
               Width: 648
              Height: 432
           FrameRate: 29.9700
        BitsPerPixel: 24
         VideoFormat: 'RGB24'
    >> frame = read(obj,25);imshow(frame);   %%此处read函数可以将视频中指定的帧数如此处为25帧读取出来
    %%imshow可以显示该帧。

    本文部分数据、代码和方法介绍来源于网络。

    本文仅供大家参考学习,欢迎指正!

    更多MATLAB学习资源请入QQ群:953314432。

    展开全文
  • 初识MATLAB文件读取MATLAB的每一个脚本文件,几乎都涉及到文件的读写操作,我以几个案例来分析MATLAB文件读取的基本操作。1. 打开与关闭文件打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help...

    初识MATLAB之文件读取

    MATLAB的每一个脚本文件,几乎都涉及到文件的读写操作,我以几个案例来分析MATLAB的文件读取的基本操作。

    1. 打开与关闭文件

    打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help帮助的内容拿出来介绍具体。

    FID = fopen(FILENAME,PERMISSION) 打开文件FILENAME, 由PERMISSION指定的模式:

    'r'    打开文件进行阅读

    'w'   打开文件写; 丢弃现有内容

    'a'    打开或创建文件以供写作; 将数据附加到文件末尾

    'r+'   打开(不创建)文件进行读写

    'w+'    打开或创建文件进行阅读和写作; 丢弃现有内容

    'a+'     打开或创建文件进行阅读和写作; 将数据附加到文件末尾

    'W'   打开文件进行写入而不自动刷新

    'A'    打开文件,无需自动刷新即可追加

    仅当文件时,FILENAME可以是MATLABPATH相对部分路径名打开阅读。

    您可以以二进制模式(默认)或文本模式打开文件。在二进制模式下,没有任何字符被挑出来进行特殊处理。在PC上的文本模式中,前面有回车符在输入中删除换行符并在换行符之前添加输出中的字符。 要以文本模式打开文件,请将“t”附加到权限字符串,例如'rt'和'w + t'。 (在Unix上,文本和二进制模式是相同的,所以这没有效果。 在PC系统上 这很关键。)

    status = fclose(FID)  丢失与文件标识符FID关联的文件,这是从早先调用FOPEN获得的整数值。 fclose如果成功则返回0,否则返回-1。 如果FID不代表打开文件,或者等于0(标准输入),1(标准输出),或2(标准错误),fclose引发错误。

    以下为一个打开与关闭文件的案例:

    >> filename='input.txt';

    permission='r';

    fid=fopen(filename,permission),

    status=fclose(fid)

    案例分析:文件名input.txt ,打开方式只读,文件标识为4,status 为0,关闭正常。

    fid =

    4status=

    0

    2. fwrite和fread函数

    使用fwrite和fread函数来对二进制文件进行读写,这里有三个案例,分别为写操作案例,读操作案例和不能同时读写案例。

    2.1 fwrite函数

    MATLAB中help帮助中对fwrite函数是这样介绍的:

    COUNT = fwrite(FID,A,PRECISION)  写出矩阵A的元素到指定的文件,将MATLAB值转换为指定的值精确。

    PRECISION控制结果的形式和大小。 查看列表FREAD允许的精度。 如果未指定PRECISION,MATLAB使用默认值,即'uint8'。 如果是'bitN'或'ubitN'用于PRECISION,然后用于任何超出范围的值A.被写为一个值,所有位都打开。 如果精度是'char'或'char * 1',MATLAB使用编码写字符与文件关联的方案。 有关更多信息,请参见FOPEN。

    filename='input2.bin';

    permission='r+';

    fid=fopen(filename,permission);

    a=magic(5);

    precision='int32';

    count=fwrite(fid,a,precision),

    status=fclose(fid)

    案例分析:文件名input2.bin,打开方式读写,status 为0,关闭正常。写入的矩阵为特殊矩阵magic(5),count 为25,表示写入了25个元素,是正确的。

    count =

    25status=

    0

    2.1 fread函数

    MATLAB中help帮助中对fread函数是这样介绍的:

    A = fread(FID,SIZE,PRECISION)   根据文件来阅读文件字符串PRECISION指定的数据格式。该PRECISION输入通常包含一个数据类型说明符'int'或'float',后跟一个给出大小的整数位。 使用此语法时,SIZE参数是可选的。

    以下任何字符串,MATLAB版本或可以使用它们的C或Fortran等价物。 如果没有指定,默认精度为'uint8'。

    >> filename='input2.bin';

    permission='r+';

    fid=fopen(filename,permission);

    precision='int32';

    data=reshape(fread(fid,count,precision),5,5)

    status=fclose(fid)

    案例分析:文件名input2.bin,打开方式读写,status 为0,关闭正常。由2.1的案例可知写入的矩阵为特殊矩阵magic(5),使用fread函数读出的矩阵为data,如下所示。

    data =

    17 24 1 8 15

    23 5 7 14 16

    4 6 13 20 22

    10 12 19 21 3

    11 18 25 2 9status=

    0

    2.3 不能同时读写案例

    当分别实现了读写文件后,我想可不可以在同一次打开的文件中,先进行写操作,再进行读操作。案例(至少这个)证实我不能这样干。但可以进行完写吃操作后关闭文件在打开再进行读文件操作。详见4.中的案例。(如果可以这样做是我没法实现,请评论留言,谢谢)

    >> filename='input2.bin';

    permission='r+';

    fid=fopen(filename,permission);

    a=magic(5);

    precision='int32';

    count=fwrite(fid,a,precision);

    data=reshape(fread(fid,count,precision),5,5)

    status=fclose(fid)

    案例分析:以下为报错结果,我没法解决。

    Error usingreshape

    To RESHAPE the number of elements must not change.

    3. fprintf和fscanf函数

    使用fprintf和fscanf函数来对文本文件进行读写,这里有两个案例,分别为写操作案例和读操作案例。

    3.1 fprintf函数

    MATLAB中help帮助中对fprintf函数是这样介绍的:

    fprintf(FID, FORMAT, A, ...)   将FORMAT应用于所有元素数组A和列顺序中的任何其他数组参数,并写入数据到文本文件。 FID是整数文件标识符。 获得来自FOPEN的FID,或将其设置为1(标准输出,屏幕)或2(标准错误)。 fprintf使用中指定的编码方案打电话给FOPEN。

    >> filename='input2.txt';

    permission='r+';

    fid=fopen(filename,permission);

    a=magic(5);

    format='%d %d %d %d %d\n';

    count=fprintf(fid,format,a);

    status=fclose(fid),

    type input2.txt

    案例分析:文件名input2.txt,打开方式读写,status 为0,关闭正常。写入的矩阵为特殊矩阵magic(5),type input2.txt,表示显示 input2.txt文件中的内容,如下所示是正确的。且写入文件中的格式为'%d %d %d %d %d\n',代表每个元素以‘ ’隔开,且每个5就换行。

    status =

    0

    17 23 4 10 11

    24 5 6 12 18

    1 7 13 19 25

    8 14 20 21 2

    15 16 22 3 9

    3.2 fscanf函数

    MATLAB中help帮助中对fscanf函数是这样介绍的:

    fscanf(FID,FORMAT,SIZEA)   从文本文件中读取和转换数据按列顺序进入数组A. FID是从中获取的文件标识符FOPEN。 COUNT是一个可选的输出参数,返回数字元素成功阅读 。

    FORMAT是包含普通字符和/或转换的字符串规范,包括%字符,可选星号赋值抑制,可选的宽度字段和转换字符(例如d,i,o,u,x,e,f,g,s或c)。

    将SIZEA元素放入A.SIZEA的有效表格是:

    inf

    读取到文件末尾。 (默认)

    N

    最多将N个元素读入列向量。

    [M,N]

    读取至多填充M-by-N矩阵的M * N个元素

    按列顺序。 N可以是inf,但M不能。

    >> filename='input2.txt';

    permission='r+';

    fid=fopen(filename,permission);

    a=magic(5);

    format='%d';

    count=fscanf(fid,format,[5,inf]),

    status=fclose(fid),

    type input2.txt

    案例分析:文件名input2.txt,打开方式读写,status 为0,关闭正常。由3.1的案例可知写入的矩阵为特殊矩阵magic(5),使用函数fscanf读出的矩阵为count,如下所示。且与type input2.txt所给出的矩阵对比,说明使用正确。

    count =

    17 24 1 8 15

    23 5 7 14 16

    4 6 13 20 22

    10 12 19 21 3

    11 18 25 2 9status=

    0

    17 23 4 10 11

    24 5 6 12 18

    1 7 13 19 25

    8 14 20 21 2

    15 16 22 3 9

    4. 文件读写位置控制

    我们可以自主控制文件的读写的位置。主要有四个函数,feof函数,frewind函数,fseek函数,ftell函数。以下案例将打开与关闭文件,读与写文本文件的操作都复习了一遍。且简单介绍feof函数,frewind函数,fseek函数,ftell函数的内容:

    ST = feof(FID) 如果文件结束指示符,则返回1已设置文件标识符FID的文件,否则为0。当对文件执行读取操作时,将设置文件结束指示符与FID相关联的尝试读取超过文件末尾的内容。

    frewind(FID)  将文件位置指示器设置为开头与文件标识符FID关联的文件。

    STATUS = fseek(FID, OFFSET, ORIGIN)  重新定位文件位置与给定FID关联的文件中的指示符。 fseek设置了位置指示符指向相对于指定OFFSET的字节起源。

    OFFSET值解释如下:

    > = 0在ORIGIN之后移动位置指示符OFFSET字节。

    <0在ORIGIN之前移动位置指示器OFFSET字节。

    ORIGIN值解释如下:

    'bof'或-1文件开头

    'cof'或0文件中的当前位置

    'eof'或1文件结尾

    POSITION = ftell(FID)  返回文件位置的位置指定文件中的指示符。 位置以字节表示从文件的开头。 如果返回-1,则表示查询不成功。 使用FERROR来确定性质的错误。

    1 >> filename='input2.txt';2 permission='r+';3 fid1=fopen(filename,permission);4 a=magic(5);5 format='%d %d %d %d %d\n';6 count=fprintf(fid1,format,a);7 status=fclose(fid1),8 fid2=fopen(filename,permission);9 a=magic(5);10 format='%d';11 count=fscanf(fid2,format,[5,inf]),12 eof=feof(fid2),13 frewind(fid2),14 status=fseek(fid2,3,0),15 position=ftell(fid2),16 status=fclose(fid2),

    案例分析:eof为0,代表文件的末尾指示值未被设定,第20行的status 为0,代表,设定指针位置操作成功。position 为3,代表指针距离文件起始位置的距离为3字节。第30行和第1行的status代表文件关闭正常

    1 status =

    2

    3 0

    4

    5

    6 count =

    7

    8 17 24 1 8 15

    9 23 5 7 14 16

    10 4 6 13 20 22

    11 10 12 19 21 3

    12 11 18 25 2 9

    13

    14

    15 eof =

    16

    17 0

    18

    19

    20 status =

    21

    22 0

    23

    24

    25 position =

    26

    27 3

    28

    29

    30 status =

    31

    32 0

    总结:内容的总结不想写了,特别提及一点,这次我真正学会了代码粘贴的正确姿势。最后如果你对内容有所疑问可评论留言。谢谢阅读。

    展开全文
  • 最近,需要验证c与matlab进行的同一个下变频,下采样操作结果是否一致,于是,需要将c处理后的数据存储下来,在matlab读取,发现自己对c读取文件操作并不是很熟悉,于是,对此,进行一番总结。 ...
  • MATLAB的每一个脚本文件,几乎都涉及到文件的读写操作,我以几个案例来分析MATLAB文件读取的基本操作。1. 打开与关闭文件 打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help帮助的内容拿出来...
  • 图像数据可以通过imread函数,但对于一般的文件(如.dat文件),需要通过文件操作函数: fopen、fread、fwrite、fclose fid = fopen(fullpath,'rb'); img = fread(fid,total,'uint16'); fclose(fid); 2、目录...
  • matlab读取文本等操作

    2018-01-16 17:04:30
    matlab读取文本等操作,简单方便。程序是一个框架,里面的文件和内容包括路径可以随意根据需要自己设置。
  • matlab中fprintf函数的详细使用方式示例如下: fprintf函数可以将数据按选定格式读取到文本文件中。其调用格式为: fprintf(fid,format,A) 说明:fid为文件句柄,指定要读取数据的文件,format是拿来控制所写数据...
  • Matlab文件读取操作

    2014-09-16 13:48:31
    MATLAB中,另一个导入数据的常用函数为importdata,该函数的用法如下: importdata('filename'),将filename中的数据导入到工作区中; A = importdata('filename'),将filename中的数据导入到工作区中,并保存为...
  • 利用matlab读取hdf图像,同时对图像进行操作,将得到的图像保存为nc文件,同时展示结果
  • MATLAB中的图像处理工具箱提供了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。可用其对有噪图像或退化图像进行去噪或还原、增强图像以获得更高的清晰度、提取特征、分析形状和纹理,...
  • %读取文件夹下的文件 files_name =sort_nat({files.name});%调整图片排名顺序 for i=3:length(files_name)%从第3个开始,去掉前两个无用 % 代码 end %sort_nat具体内容 function [cs,index] = sort_nat(c,...
  • matlab文件读取总结matlab文件读取函数功能可以读取各种文件类型
  • matlab 文件读取I/O操作

    2020-04-21 14:09:58
    Matlab程序可以看作数据处理器,该处理器从外部源(文件,网络,磁盘等)读入数据,并将数据处理结果输出到指定设备(文件,网络,磁盘等),即I/O操作,在matlab中提供了许多读取和写入文件的函数,通过这些函数可以...
  • 当遇到一些需要大量数据的项目,数据的读取与储存显得...对于平常的.txt,和.xlsx文件MATLAB有对应的函数帮助读取,但是遇到pdf文件MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件读取数据的方法。
  • matlab 读取txt文件数据

    千次阅读 2016-03-23 09:53:51
    文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数...
  • 关于MATLAB读取txt文件的方法 一、如何读取一个文档下,多个txt文件? 一般读取的文件,命名都具有一定的规律,除去相同部分,剩下的变化按照时间、序号、某一特定的标志符等进行排列。 下面我们举个例子来操作。 ...
  • matlab读取写音频文件

    千次阅读 2020-11-25 11:27:11
    跟音频有关的工程常需要人耳听音频文件,这就涉及到matlab如何对音频文件进行操作。 写入wav文件 load handel.mat audiowrite('handel.wav',y,Fs) 其中handel.mat 是matlab自有数据,y是加载的音频信号,Fs是...
  • matlab 读取txt文件名称

    千次阅读 2018-07-31 10:19:06
    %% 格式化文本的读操作   %只读形式打开txt文件 file_t = fopen('mytxt.txt','r'); %以十进制读取,且读取的数据自动排成一列,排的顺序为:先从第一行左边到第一行右边,然后排第二行 A = fscanf(file_t,...
  • MATLAB读取nc文件信息和作图的一些基础操作

    千次阅读 多人点赞 2020-02-16 01:15:49
    %旋转矩阵,因为matlab是列优先 [ r,c ] = size ( sst_plot ) % 读取行r、列c for i = 1:r % 建立for循环嵌套 for k = 1:c if sst_plot ( i,k ) < -100 % 读取矩阵每个位置数据,先行后列 sst_...
  • 初识MATLAB文件读取

    2019-03-15 22:10:00
     MATLAB的每一个脚本文件,几乎都涉及到文件的读写操作,我以几个案例来分析MATLAB文件读取的基本操作。 1. 打开与关闭文件  打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help帮助的内容拿...
  • 1、读取指定目录下的所有符合相应后缀的文件的名字。 filepath = '..\original_ply'; dirOutput = dir(fullfile(filepath,'*.ply')); plyName = {dirOutput.name}; 其中..\是指当前目录的上一级目录,'*.ply'是...
  • 生成的HEVC的txt文件众多,需要提取需要的bits 手动操作繁杂 针对多文件夹下多个相同的txt文件适用
  • MATLAB文本文件操作总结

    千次阅读 2015-04-07 20:13:20
    MATLAB读取txt文件的几种方法总结
  • MATLAB的每一个脚本文件,几乎都涉及到文件的读写操作,我以几个案例来分析MATLAB文件读取的基本操作。1. 打开与关闭文件 打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help帮助的内容拿出来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 524
精华内容 209
关键字:

matlab读取文件操作

matlab 订阅