精华内容
下载资源
问答
  • TextScan_mac.dmg

    2021-12-15 14:16:30
    mac下一款非常好用的文字OCR软件,用过你就知道,识别能力非常强,手写体,结构复杂的文字都可以识别到,准确率非常高!
  • Matlab中textscan函数用法

    千次阅读 2020-12-24 17:32:38
    textscan函数从文本文件或字符串读取格式化数据。 语法 C = textscan(fileID,formatSpec) C = textscan(fileID,formatSpec,N) C = textscan(chr,formatSpec) C = textscan(chr,formatSpec,N) C = textscan(__...

    目录

    语法

    说明

    示例

    1.读取浮点数

    2.读取不同类型的数据

    3.删除字面文本

    4.跳过每行的其余部分

    5.指定分隔符和空值转换

    6.指定要视为空或注释的文本

    7.将重复的分隔符视为一个分隔符

    8.指定重复的转换设定符并收集数值数据

    9.读取或跳过引用文本和数值字段

    10.读取外语日期

    11.读取非默认的控制字符

    12.恢复扫描

    输入参数

    输出参数


            textscan函数从文本文件或字符串读取格式化数据。

    语法

    C = textscan(fileID,formatSpec)
    
    C = textscan(fileID,formatSpec,N)
    
    C = textscan(chr,formatSpec)
    
    C = textscan(chr,formatSpec,N)
    
    C = textscan(___,Name,Value)
    
    [C,position] = textscan(___)

    说明

    • C = textscan(fileID,formatSpec) 将已打开的文本文件中的数据读取到元胞数组 C。该文本文件由文件标识符fileID指示。使用 fopen 可打开文件并获取fileID值。完成文件读取后,请调用fclose(fileID) 来关闭文件。
    • textscan 尝试将文件中的数据与formatSpec中的转换设定符匹配。textscan函数在整个文件中按formatSpec重复扫描数据,直至formatSpec找不到匹配的数据时才停止。
    • C = textscan(fileID,formatSpec,N) 按 formatSpec 读取文件数据 N 次,其中 N 是一个正整数。要在N个周期后从文件读取其他数据,请使用原 fileID 再次调用textscan进行扫描。如果通过调用具有相同文件标识符 (fileID) 的textscan恢复文件的文本扫描,则 textscan 将在上次终止读取的点处自动恢复读取。
    • C = textscan(chr,formatSpec) 将字符向量 chr 中的文本读取到元胞数组 C 中。从字符向量读取文本时,对 textscan 的每一次重复调用都会从开头位置重新开始扫描。要从上次位置重新开始扫描,需要指定 position 输出参数。
    • textscan 尝试将字符向量 chr 中的数据与 formatSpec 中指定的格式匹配。
    • C = textscan(chr,formatSpec,N) 按 formatSpec N 次,其中 N 是一个正整数。
    • C = textscan(___,Name,Value) 使用一个或多个 Name,Value 对组参数以及上述语法中的任何输入参数来指定选项。
    • [C,position] = textscan(___) 在扫描结束时返回文件或字符向量中的位置作为第二个输出参数。对于文件,该值等同于调用 textscan 后再运行 ftell(fileID) 所返回的值。对于字符向量,position指示 textscan 读取了多少个字符。

    示例

    1.读取浮点数

            读取包含浮点数的字符向量。

    chr = '0.41 8.24 3.57 6.24 9.27';
    C = textscan(chr,'%f');

      formatSpec中的设定符 '%f'指示textscanchr中的每个字段与一个双精度浮点数进行匹配。

    显示元胞数组 C 的内容。

    celldisp(C)
     
    C{1} =
     
        0.4100
        8.2400
        3.5700
        6.2400
        9.2700

            读取相同字符向量,将每个值截短至一位小数。

    C = textscan(chr,'%3.1f %*1d');

            设定符 %3.1f 指示字段宽度为 3 位数,精度为 1。textscan 函数读取全部 3 位数,包括小数点和小数点后的 1 位数。设定符 %*1d 指示 textscan 跳过其余位数。

            显示元胞数组 C 的内容。

    2.读取不同类型的数据

            加载数据文件,并读取具有适当类型的每一列。

            加载文件 scan1.dat 并在文本编辑器中预览其内容。屏幕截图如下所示。

     filename = fullfile(matlabroot,'examples','matlab','scan1.dat');

            打开文件,用正确的转换设定符读取每一列。textscan 返回一个 1-by-9 元胞数组 C

    fileID = fopen(filename);
    C = textscan(fileID,'%s %s %f32 %d8 %u %f %f %s %f');
    fclose(fileID);
    whos C
      Name      Size            Bytes  Class    Attributes
    
      C         1x9              2249  cell               

            查看C中的每个元胞的 MATLAB® 数据类型。

    C
    
    C=1×9 cell
      Columns 1 through 5
    
        {3x1 cell}    {3x1 cell}    {3x1 single}    {3x1 int8}    {3x1 uint32}
    
      Columns 6 through 9
    
        {3x1 double}    {3x1 double}    {3x1 cell}    {3x1 double}

            检查各个条目。请注意,C{1} 和 C{2} 为元胞数组。C{5} 的数据类型为 uint32,因此 C{5} 的前两个元素为 32 位无符号整数的最大值或 intmax('uint32')

    celldisp(C)
     
    C{1}{1} =
     
    09/12/2005
     
     
    C{1}{2} =
     
    10/12/2005
     
     
    C{1}{3} =
     
    11/12/2005
     
     
    C{2}{1} =
     
    Level1
     
     
    C{2}{2} =
     
    Level2
     
     
    C{2}{3} =
     
    Level3
     
     
    C{3} =
     
       12.3400
       23.5400
       34.9000
    
     
     
    C{4} =
     
       45
       60
       12
    
     
     
    C{5} =
     
       4294967295
       4294967295
           200000
    
     
     
    C{6} =
     
       Inf
      -Inf
        10
    
     
     
    C{7} =
     
           NaN
        0.0010
      100.0000
    
     
     
    C{8}{1} =
     
    Yes
     
     
    C{8}{2} =
     
    No
     
     
    C{8}{3} =
     
    No
     
     
    C{9} =
     
       5.1000 + 3.0000i
       2.2000 - 0.5000i
       3.1000 + 0.1000i

    3.删除字面文本

            从前一示例的第二列数据的每个字段中删除字面文本 'Level'。下面显示文件的预览。

            打开文件,并匹配 formatSpec 输入中的字面文本。

    filename = fullfile(matlabroot,'examples','matlab','scan1.dat');
    fileID = fopen(filename);
    C = textscan(fileID,'%s Level%d %f32 %d8 %u %f %f %s %f');
    fclose(fileID);
    C{2}
    ans = 3x1 int32 column vector
    
       1
       2
       3
    

            查看 C 中的第二个元胞的 MATLAB® 数据类型。1-by-9 元胞数组 C 的第二个元胞的数据类型现在为 int32

    disp( class(C{2}) )
    int32

    4.跳过每行的其余部分

            将前一示例中文件的第一列读取到元胞数组中,跳过行的其余部分。

    filename = fullfile(matlabroot,'examples','matlab','scan1.dat');
    fileID = fopen(filename);
    dates = textscan(fileID,'%s %*[^\n]');
    fclose(fileID);
    dates{1}
    ans = 3x1 cell array
        {'09/12/2005'}
        {'10/12/2005'}
        {'11/12/2005'}

      textscan 返回一个日期元胞数组。

    5.指定分隔符和空值转换

            加载文件 data.csv 并在文本编辑器中预览其内容。屏幕截图如下所示。请注意该文件包含逗号分隔的数据以及空值。

            读取该文件,将空元胞转换为 -Inf

    filename = fullfile(matlabroot,'examples','matlab','data.csv');
    fileID = fopen(filename);
    C = textscan(fileID,'%f %f %f %f %u8 %f',...
    'Delimiter',',','EmptyValue',-Inf);
    fclose(fileID);
    column4 = C{4}, column5 = C{5}
    column4 = 2×1
    
         4
      -Inf
    
    column5 = 2x1 uint8 column vector
    
        0
       11
    

      textscan 返回 1-by-6 元胞数组 Ctextscan 函数将 C{4} 中的空值转换为 -Inf,其中 C{4} 与浮点格式关联。因为 MATLAB® 将无符号整数-Inf表示为 0,所以textscan将 C{5} 中的空值转换为 0 而不是 -Inf

    6.指定要视为空或注释的文本

            加载文件 data2.csv并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,该文件包含可以解释为注释和其他项(如 'NA' 或 'na')的数据,这些数据可能表示空字段。

    filename = fullfile(matlabroot,'examples','matlab','data2.csv');

            指定textscan应视为注释或空值的输入,并将该数据扫描到 C 中。

    fileID = fopen(filename);
    C = textscan(fileID,'%s %n %n %n %n','Delimiter',',',...
    'TreatAsEmpty',{'NA','na'},'CommentStyle','//');
    fclose(fileID);

            显示输出。

    celldisp(C)
     
    C{1}{1} =
     
    abc
     
     
    C{1}{2} =
     
    def
     
     
    C{2} =
     
         2
       NaN
    
     
     
    C{3} =
     
       NaN
         5
    
     
     
    C{4} =
     
         3
         6
    
     
     
    C{5} =
     
         4
         7
    

    7.将重复的分隔符视为一个分隔符

            加载文件 data3.csv

    filename = fullfile(matlabroot,'examples','matlab','data3.csv');

            要将重复的逗号视为单个分隔符,请使用 MultipleDelimsAsOne 参数并将值设置为 1 (true)。

    fileID = fopen(filename);
    C = textscan(fileID,'%f %f %f %f','Delimiter',',',...
    'MultipleDelimsAsOne',1);
    fclose(fileID);
    
    
    celldisp(C)
     
    C{1} =
     
         1
         5
    
     
     
    C{2} =
     
         2
         6
    
     
     
    C{3} =
     
         3
         7
    
     
     
    C{4} =
     
         4
         8
    

    8.指定重复的转换设定符并收集数值数据

            加载此示例的数据文件 grades.txt并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,该文件包含重复的分隔符。

    filename = fullfile(matlabroot,'examples','matlab','grades.txt');

            使用格式 '%s' 四次读取列标题。

    fileID = fopen(filename);
    formatSpec = '%s';
    N = 4;
    C_text = textscan(fileID,formatSpec,N,'Delimiter','|');

            读取文件中的数值数据。

    C_data0 = textscan(fileID,'%d %f %f %f')
    C_data0=1×4 cell
        {4x1 int32}    {4x1 double}    {4x1 double}    {4x1 double}

      CollectOutput 的默认值是 0 (false),因此 textscan 以一个单独的数组返回每列数值数据。

            将文件位置指示符设置为文件的开头。

    frewind(fileID);

            重新读取文件并将 CollectOutput 设置为 1 (true),将相同类的连续列收集到一个单独的数组中。您可以使用 repmat 函数指示 %f 转换设定符必须出现三次。当一种格式重复多次时,此方法很有用。

    C_text = textscan(fileID,'%s',N,'Delimiter','|');
    C_data1 = textscan(fileID,['%d',repmat('%f',[1,3])],'CollectOutput',1)
    C_data1=1×2 cell
        {4x1 int32}    {4x3 double}

            测试分数(均为 double)被收集到一个单独的 4×3 数组中。

            关闭文件。

    fclose(fileID);

    9.读取或跳过引用文本和数值字段

            读取文本文件的第一列数据和最后一列数据。跳过文本列和整数数据列。

            加载文件 names.txt 并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,该文件包含两列带引号的文本,后跟一个整数列,最后一列为浮点数。

    filename = fullfile(matlabroot,'examples','matlab','names.txt');

            读取该文件中的第一列数据和最后一列数据。使用转换设定符 %q 读取由双引号 (") 引起来的文本。%*q 跳过引用文本,%*d 跳过整数字段,而 %f 读取浮点数。使用 'Delimiter' 名称-值对组参数指定逗号分隔符。

    fileID = fopen(filename,'r');
    C = textscan(fileID,'%q %*q %*d %f','Delimiter',',');
    fclose(fileID);

            显示输出。textscan 返回元胞数组 C,其中删除了文本前后的双引号。

    celldisp(C)
     
    C{1}{1} =
     
    Smith, J.
     
     
    C{1}{2} =
     
    Bates, G.
     
     
    C{1}{3} =
     
    Curie, M.
     
     
    C{1}{4} =
     
    Murray, G.
     
     
    C{1}{5} =
     
    Brown, K.
     
     
    C{2} =
     
       71.1000
       69.3000
       64.1000
      133.0000
       64.9000

    10.读取外语日期

            加载文件 german_dates.txt 并在文本编辑器中预览其内容。屏幕截图如下所示。请注意,第一列值包含德语的日期,第二列和第三列是数值。

    filename = fullfile(matlabroot,'examples','matlab','german_dates.txt');

            打开文件。将与文件关联的字符编码方案指定为 fopen 的最后输入。

    fileID = fopen(filename,'r','n','ISO-8859-15');

            读取文件。使用 %{dd % MMMM yyyy}D 设定符指定文件中日期的格式。使用 DateLocale 名称-值对组参数指定日期的区域设置。

    C = textscan(fileID,'%{dd MMMM yyyy}D %f %f',...
        'DateLocale','de_DE','Delimiter',',');
    fclose(fileID);

            查看 C 中第一个元胞的内容。日期以 MATLAB 使用的语言显示,具体取决于您的系统区域设置。

    C{1}
    
    ans = 3x1 datetime array
       01 January 2014 
       01 February 2014
       01 March 2014   

    11.读取非默认的控制字符

            使用sprintf转换数据中的非默认转义序列。

            创建包含换页符 \f 的文本。随后,要使用textscan读取文本,请调用sprintf显式转换换页符。

    lyric = sprintf('Blackbird\fsinging\fin\fthe\fdead\fof\fnight');
    C = textscan(lyric,'%s','delimiter',sprintf('\f'));
    
    C{1}
    ans = 7x1 cell array
        {'Blackbird'}
        {'singing'  }
        {'in'       }
        {'the'      }
        {'dead'     }
        {'of'       }
        {'night'    }
    

    textscan 返回元胞数组 C

    12.恢复扫描

            从开头以外的位置恢复扫描。

            如果恢复文本扫描,textscan 每次都会从开头读取。要从任何其他位置恢复扫描,请在 textscan 的初始调用中使用双输出参数语法。

            例如,创建一个名为 lyric 的字符向量。读取该字符向量的第一个词,然后恢复扫描。

    lyric = 'Blackbird singing in the dead of night';
    [firstword,pos] = textscan(lyric,'%9c',1);
    lastpart = textscan(lyric(pos+1:end),'%s');

    输入参数

    fileID - 文件标识符
    数值标量

            已打开的文本文件的文件标识符,指定为数值。使用 textscan 读取文件之前,您必须使用 fopen 打开文件并获取 fileID

    数据类型: double

    formatSpec - 数据字段的格式
    字符向量 | 字符串

            数据字段的格式,指定为由一个或多个转换设定符组成的字符向量或字符串。textscan在读取输入时,会尝试将数据与formatSpec中指定的格式进行匹配。如果 textscan未能匹配数据字段,它将会停止读取并在出错前返回读取的所有字段。

            转换设定符的数量确定输出数组 C 中元胞的数量。

    数值字段

            下表列出了可用于数值输入的转换设定符。

    数值输入类型转换设定符输出类
    有符号整数%dint32
    %d8int8
    %d16int16
    %d32int32
    %d64int64
    无符号整数%uuint32
    %u8uint8
    %u16uint16
    %u32uint32
    %u64uint64
    浮点数%fdouble
    %f32single
    %f64double
    %ndouble

    非数值字段

            下表列出了可用于包含非数值字符的输入的转换设定符。

    非数值输入类型转换设定符详细信息
    字符%c读取任何单个字符,包括分隔符。
    文本数组%s读取为字符向量元胞数组。
    %q

    读取为字符向量元胞数组。如果文本以双引号 (") 开头,则忽略该前导引号及与其成对的后引号,该后引号是双引号的第二个实例。将转义双引号(例如 ""abc"")替换为单独双引号 ("abc")。%q 会忽略出现在后双引号之后的任何双引号。

    示例:'%q' 将 '"Joe ""Lightning"" Smith, Jr."' 读作 'Joe "Lightning" Smith, Jr.'

    日期和时间%D

    以与上面的 %q 相同的方式读取,然后转换为日期时间值。

    %{fmt}D

    以与上面的 %q 相同的方式读取,然后转换为日期时间值。fmt描述输入文本的格式。fmt输入是一个字母标识符字符向量,该字符向量为日期时间的Format属性的有效值。textscan会将与此格式不匹配的文本转换为 NaT 值。

    有关日期时间显示格式的详细信息,请参阅日期时间数组的Format 属性。

    示例:'%{dd-MMM-yyyy}D' 指定某个日期的格式,例如 '01-Jan-2014'

    持续时间%T

    以与上面的 %q 相同的方式读取,然后转换为持续时间值。

    %{fmt}T

    以与上面的 %q 相同的方式读取,然后转换为持续时间值。fmt描述输入文本的格式。fmt输入是一个字母标识符字符向量,该字符向量为持续时间的Format属性的有效值。textscan会将与此格式不匹配的文本转换为 NaN 值。

    有关持续时间显示格式的详细信息,请参阅持续时间数组的Format 属性。

    示例:'%{hh:mm:ss}T' 指定持续时间的格式,例如 '10:30:15' 表示 10 小时 30 分钟 15 秒。

    类别%C

    以与 %q 相同的方式读取,然后转换为分类数组中的类别名称。textscan 会将 <undefined> 文本转换为输出分类数组中的未定义值。

    模式匹配%[...]

    将方括号中的字符读取为字符向量元胞数组,直到遇到第一个不匹配的字符。要在集合中包括 ],请首先指定它:%[]...]

    示例:%[mus] 将 'summer ' 读作 'summ'

    %[^...]

    排除方括号中的字符,直到读取到第一个匹配的字符。要排除 ],请首先指定它:%[^]...]

    示例:%[^xrg] 将 'summer ' 读作 'summe'

    可选运算符

      formatSpec 中的转换设定符可以包含按以下顺序显示的可选运算符(包含为了表达清晰而保留的空格):

            可选运算符包括:

    • 要忽略的字段和字符

      textscan按顺序读取文件中的所有字符,除非要求它忽略特定字段或字段中的某一部分。

      在百分比字符 (%) 之后插入星号字符 (*),可跳过某个字段或字符字段中的某一部分。

      运算符

      采取的操作

      %*k

      跳过字段。k 是标识要跳过的字段的任何转换设定符。textscan 不会为任何此类字段创建输出元胞。

      示例:'%s %*s %s %s %*s %*s %s'(空格为可选项)将文本
      'Blackbird singing in the dead of night' 转换为四个输出元胞,即
      'Blackbird' 'in' 'the' 'night'

      '%*ns'

      跳过 n 个字符,其中 n 是小于或等于字段中字符数的一个整数。

      示例:'%*3s %s' 将 'abcdefg' 转换为 'defg'。如果分隔符为逗号,则同一分隔符将 'abcde,fghijkl' 转换为包含 'de';'ijkl' 的元胞数组。

      '%*nc'

      跳过 n 个字符,包括分隔符。

    • 字段宽度

      textscan读取字段宽度或精度指定的字符数或位数,或者读到第一个分隔符,以先出现者为准。小数点、符号(+ 或 -)、指数字符以及数字指数中的数字计为字段宽度中的字符和数字。对于复数,字段宽度指的是实部和虚部的各自宽度。对于虚部,字段宽度包括 + 或 −,但不包括 i 或 j。通过在转换设定符中的百分号 (%) 之后插入数字来指定字段宽度。

      示例:%5f 将 '123.456' 读作 123.4

      示例:%5c 将 'abcdefg' 读作 'abcde'

      当字段宽度操作符与单个字符 (%c) 一起使用时,textscan 也会读取分隔符、空白和行尾字符。
      示例:%7c 读取包括空白在内的 7 个字符,因此 'Day and night' 读作 'Day and'

    • 精度

      对于浮点数(%n%f%f32%f64),可以指定要读取的小数位数。

      示例:%7.2f 将 '123.456' 读作 123.45

    • 要忽略的字面文本

      textscan 忽略追加到 formatSpec 转换设定符的文本。

      示例:Level%u8 将 'Level1' 读作 1

      示例:%u8Step 将 '2Step' 读作 2

    数据类型: char | string

    N - 要应用 formatSpec 的次数
    Inf (默认) | 正整数

            要应用formatSpec的次数,指定为正整数。

    数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    chr - 输入文本
    字符向量 | 字符串

            要读取的输入文本。

    数据类型: char | string

    名称-值对组参数

            指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

            示例: C = textscan(fileID,formatSpec,'HeaderLines',3,'Delimiter',',') 跳过数据的前三行,然后读取其余数据,并将逗号视为分隔符。

    名称不区分大小写。

    'CollectOutput' - 确定数据串联的逻辑指示符
    false (默认) | true

            确定数据串联的逻辑指示符,指定为由 'CollectOutput' 和 true/false 组成的逗号分隔对组。如果为 true,则导入函数会将同一 MATLAB® 基础类的连续输出元胞串联为单个数组。

    'CommentStyle' - 指定要忽略的文本的符号
    字符向量 | 字符向量元胞数组 | 字符串 | 字符串数组

            用于指定要忽略的文本的符号,指定为逗号分隔的对组,其中包含 'CommentStyle' 和一个字符向量、字符向量元胞数组、字符串或字符串数组。

            例如,指定一个字符(如 '%')以忽略同一行上此符号后面的文本。指定一个包含两个字符向量的元胞数组(如 {'/*','*/'}),以忽略这些序列之间的任何文本。

            MATLAB 仅检查位于每个字段开头而不是字段中的注释。

    示例: 'CommentStyle',{'/*','*/'}

    数据类型: char | string

    'DateLocale' - 用于读取日期的区域设置
    字符向量 | 字符串

            用于读取日期的区域设置,指定为逗号分隔的对组,包含 'DateLocale' 和 xx_YY 格式的字符向量,其中 xx 是用于指定语言的小写 ISO 639-1 双字母代码,YY 是用于指定国家/地区的大写 ISO 3166-1 alpha-2 代码。有关区域设置的常见值的列表,请参阅datatime函数的 Locale 名称-值对组参数。

            使用 DateLocale 指定 textscan 在使用 %D 格式设定符将文本以日期形式读取时,应采用何种区域设置来解释月份和星期名称以及缩写。

    示例: 'DateLocale','ja_JP'

    'Delimiter' - 字段分隔符
    字符向量 | 字符向量元胞数组 | 字符串 | 字符串数组

            字段分隔符,指定为由 'Delimiter' 以及一个字符向量或字符向量元胞数组组成的逗号分隔对组。在字符向量元胞数组中指定多个分隔符。

    示例: 'Delimiter',{';','*'}

      textscan 将重复的分隔符字符解释为多个分隔符,并向输出元胞返回一个空值。

            在每一行数据中,默认字段分隔符是空白。空白可以是空格 (' ')、退格符 ('\b') 或制表符 ('\t') 的任意组合。如果未指定分隔符,则:

    • 分隔符与空白字符相同。默认的空白字符为 ' ''\b' 和 '\t'。使用 'Whitespace' 名称-值对组参数指定替代的空白字符。

    • textscan 将重复的空白字符解释为单个分隔符。

            当以下转义序列之一指定为分隔符时,textscan将该序列转换成对应的控制字符:

    \b退格符
    \n换行符
    \r回车符
    \t制表符
    \\反斜杠 (\)

            数据类型: char | string

    'EmptyValue' - 空数值字段的返回值

    NaN (默认) | 标量

            被分隔的文本文件中空数值字段的返回值,指定为由 'EmptyValue' 和一个标量组成的逗号分隔对组。

    'EndOfLine' - 行尾字符
    字符向量 | 字符串

            行尾字符,指定为由 'EndOfLine' 和一个字符向量或字符串组成的逗号分隔对组。该字符向量必须为 '\r\n',或须指定单个字符。常用的行尾字符是换行符 ('\n') 或回车符 ('\r')。如果指定 '\r\n',则导入函数会将 \r 或 \n 以及两者的组合 (\r\n) 视为行尾字符。

            默认的行尾序列是 \n\r 或 \r\n,具体取决于您的文件的内容。

            如果文件最后一行的结尾有缺失值和行尾序列,则导入函数会对这些字段返回空值。这样可确保输出元胞数组 C 中的各个元胞的大小相同。

    示例: 'EndOfLine',':'

    数据类型: char | string

    'ExpChars' - 指数字符
    'eEdD' (默认) | 字符向量 | 字符串

            指数字符,指定为由 'ExpChars' 和一个字符向量或字符串组成的逗号分隔对组。默认的指数字符为 eEd 和 D

    数据类型: char | string

    'HeaderLines' - 标题行数
    0 (默认) | 正整数

            标题行数,指定为由 'HeaderLines' 和一个正整数组成的逗号分隔对组。textscan 会跳过标题行,包括当前行的剩余部分。

    'MultipleDelimsAsOne' - 多分隔符处理
    0 (false) (默认) | 1 (true)

            多分隔符处理,指定为由 'MultipleDelimsAsOne' 和 true/false 组成的逗号分隔对组。如果为 true,则导入函数将连续分隔符当作一个分隔符处理。由空白分隔的重复分隔符也被当作一个分隔符处理。还必须指定 Delimiter 选项。

    示例: 'MultipleDelimsAsOne',1

    'ReturnOnError' - 当 textscan 未能读取或转换数据时的行为
    1 (true) (默认) | 0 (false)

            当textscan未能读取或转换数据时的行为,指定为由 'ReturnOnError' 和 true/false 组成的逗号分隔对组。如果是true,则textscan终止,不产生错误,返回所有读取的字段。如果是false,则textscan终止,产生错误,不返回输出元胞数组。

    'TreatAsEmpty' - 要作为空值处理的占位符文本
    字符向量 | 字符向量元胞数组 | 字符串 | 字符串数组

            要作为空值处理的占位符文本,指定为逗号分隔的对组,其中包含 'TreatAsEmpty' 和一个字符向量、字符向量元胞数组、字符串或字符串数组。此选项仅适用于数值字段。

    数据类型: char | string

    'Whitespace' - 空白字符
    ' \b\t' (默认) | 字符向量 | 字符串

            空白字符,指定为由 'Whitespace' 和一个字符向量或字符串(包含一个或多个字符)组成的逗号分隔对组。textscan将空格字符 char(32) 添加到任何指定的Whitespace,除非Whitespace为空 ('') 并且formatSpec包含任何转换设定符。

            当下面一个转义序列指定为任意空白字符时,textscan 会将该序列转换成对应的控制字符:

    \b退格符
    \n换行符
    \r回车符
    \t制表符
    \\反斜杠 (\)

    数据类型: char | string

    'TextType' - 文本的输出数据类型
    'char' (默认) | 'string'

            文本的输出数据类型,指定为逗号分隔的对组,其中包含 'TextType' 和 'char' 或 'string'。如果指定值 'char'textscan 将以字符向量元胞数组的形式返回文本。如果指定值 'string'textscan 将以 string 类型的数组形式返回文本。

    输出参数

    C - 文件或文本数据
    元胞数组

            文件或文本数据,以元胞数组形式返回。

            对于 formatSpec 中的每个数值转换设定符,textscan 函数将一个 K×1 MATLAB 数值向量返回给输出元胞数组 C,其中 K 是 textscan 查找与此设定符匹配的字段的次数。

            对于 formatSpec 中的每个文本转换设定符(%s%q 或 %[...]),textscan 函数都返回一个 K×1 字符向量元胞数组,其中 K 是 textscan 查找与此设定符匹配的字段的次数。对于包含字段宽度操作符的每个字符转换,textscan 返回一个 K×M 字符数组,其中 M 是字段宽度。

            对于 formatSpec 中的每个日期时间或分类转换设定符,textscan 函数将一个 K×1 日期时间或分类向量返回给输出元胞数组 C,其中 K 是 textscan 查找与此设定符匹配的字段的次数。

    position - 文件或字符向量中的位置
    整数

            扫描结束时在文件或字符向量中的位置,以 double 类的整数形式返回。对于文件,该值等同于调用 textscan 后运行 ftell(fileID) 所返回的值。对于字符向量,position 指示 textscan 读取了多少个字符。

    算法

      textscan根据关于溢出、截断和使用 NaNInf 及 -Inf 的 MATLAB 规则将数值字段转换为指定的输出类型。例如,MATLAB 将整数 NaN 表示为零。如果textscan发现空白字段与整数格式设定符(如 %d 或 %u)相关联,则将空值作为零返回,而不是作为 NaN

            在将数据匹配到文本转换设定符时,textscan会一直读取到发现分隔符或行尾字符为止。在将数据匹配到数值转换设定符时,textscan会一直读取到发现非数值字符为止。如果textscan无法再将数据匹配到特定的转换设定符,它会尝试将数据匹配到formatSpec中的下一个转换设定符。符号(+ 或 -)、指数字符和小数点视为数值字符。

    符号数字小数点数字指数字符符号数字
    读取一个符号字符(如果存在)。读取一个或多个数字。读取一个小数点(如果存在)。如果存在小数点,则读取紧跟小数点后的一个或多个数字。读取一个指数字符(如果存在)。如果存在指数字符,则读取一个符号字符。如果存在指数字符,则读取该字符后面的一个或多个数字。

      textscan将任何复数作为一个整体导入到复数字段中,将实部和虚部转换为指定的数字类型(如 %d 或 %f)。复数的有效形式如下:

    ±<real>±<imag>i|j

    示例:5.7-3.1i

    ±<imag>i|j

    示例:-7j

            不要在复数中包含嵌入的空白。textscan 将嵌入的空白解释为字段分隔符。

    展开全文
  • 介绍了Matlab中常用的textread和textscan函数的使用,通过实例演示文件文本的读取
  • matlab 中的textscan

    2019-07-03 00:56:19
    textread 与textscan的区别 textscan更适合读入大文件; textscan可以从文件的任何位置开始读入,而textread 只能从文件开头开始读入; textscan也可以从上一次textscan结束的位置开始读入,而textread不能; ...

    textread textscan的区别 

    textscan更适合读入大文件;

    textscan可以从文件的任何位置开始读入,而textread 只能从文件开头开始读入;

    textscan也可以从上一次textscan结束的位置开始读入,而textread不能;

    textscan只返回一个数组(其实应该说是一个细胞矩阵),而textread要返回多个数组(嗯嗯);

    textscan提供更多转换读入数据的选择;

    textscan提供给用户更多的配置参数。

     

    来源:http://blog.sina.com.cn/s/blog_9e67285801010buf.html

    textscan函数

    功能:读格式的数据从文本文件或字符串。适用于具有多行文字说明文本数据文件。

    ————————————————————————————————————————

    基本用法:

    C = textscan(fid, 'format')

     

    C = textscan(fid, 'format', N)

     

    C = textscan(fid, 'format', 'param', value)

     

    C = textscan(fid, 'format', N, 'param', value)

     

    C = textscan(str, ...)

     

    [C, position] = textscan(...)

    ——————————————————————————————————————

    输入参数

    fid           fopen命令返回的文件标识符,这也是和textread的最大不同之处

                需要注意的一点是,fid类似一个指针,其指向的位置会随着textscan的操作而改变,参见例9

    format        是一个字符串变量,表示读取数据及数据转换的规则,具体见format.txt

    N              读取N次,一般为行数

    输出参数

    输出一个细胞数组C

    基本与textread语法相同

    .............................................................................

    例1:

    'mydata1.txt文件如下

    Sally Level1 12.34 45 1.23e10 inf Nan Yes 5.1+3i

    Joe   Level2 23.54 60 9e19 -inf  0.001 No 2.2-.5i          

    Bill  Level3 34.90 12 2e5   10  100   No 3.1+.1i

    读入:

    >> fid = fopen('mydata1.txt');

       C = textscan(fid, ''%s%s%f32%d8%u%f%f%s%f');

       fclose(fid);

    >> C

    C =

      Columns 1 through 5

        {3x1 cell}    {3x1 cell}    [3x1 single]    [3x1 int8]    [3x1 uint32]

      Columns 6 through 9

        [3x1 double]    [3x1 double]    {3x1 cell}    [3x1 double]

    输出C为1*9的细胞数组,每个数组中存放每列的数据

    ..................................................................

    例2:

    可设置读取长度,具体是,在%和格式符之间插入数字N,代表你要读入几个数值(有点问题)

    如:

    >> dd='let us go';

    >> ddd=textscan(dd,'\')

    ddd =

        'let u'

    对于myfileli6.txt

        Sally Type1 12.34 45 Yes

        Joe Type2 23.54 60 No

        Bill Type1 34.90 12 No

    >> fid=fopen('myfileli6.txt');

    >> data=textscan(fid,'%s%s%f%f%s',3); %正常读入数据

    ....................注意对于数据省略操作应该跳过被省略部分.........

    例:

    str = '0.41 8.24 3.57 6.24 9.27';

    C = textscan(str, '%3.1f ');

    C会出现这种情况

    C=

    0.400000000000000

    1

    8.20000000000000

    4

    3.50000000000000

    7

    6.20000000000000

    4

    9.20000000000000

    7

    >> C = textscan(str, '%3.1f %*1d');

    >> C{1}

    ans =

        0.4000

        8.2000

        3.5000

        6.2000

        9.2000

    ......................................................

    例3:读取不同格式的数据

    scan1.txt如下

    09/12/2005 Level1 12.34 45 1.23e10 inf Nan Yes 5.1+3i

    10/12/2005 Level2 23.54 60 9e19 -inf  0.001 No 2.2-.5i

    11/12/2005 Level3 34.90 12 2e5   10  100   No 3.1+.1i

    现在把scan1.txt读入

    fid = fopen('scan1.dat');

    C = textscan(fid, '%s %s %f32 %d %u %f %f %s %f');

    fclose(fid);

    输出C为一个1*9的细胞矩阵

     

    C{1} = {'09/12/2005'; '10/12/2005'; '11/12/2005'} class cell

                                           

    C{2} = {'Level1'; 'Level2'; 'Level3'}    class cell

    C{3} = [12.34; 23.54; 34.9]              class single

    C{4} = [45; 60; 12]                      class int8

    C{5} = [4294967295; 4294967295; 200000]  class uint32

    C{6} = [Inf; -Inf; 10]                   class double

    C{7} = [NaN; 0.001; 100]                 class double

    C{8} = {'Yes'; 'No'; 'No'}               class cell

    C{9} = [5.1+3.0i; 2.2-0.5i; 3.1+0.1i]    class double

    C{5}中的4294967295指的是32位系统无符号整型的最大值2^32-1

    也可以把C{1}中的内容分别读入

    >> fid = fopen('scan1.txt');

    >> C = textscan(fid, '%f/%f/%f %s %u %f %f %s %f');

    >>fclose(fid);

    >> C{1}'

    ans =

         9    10    11

    >> C{2}'

    ans =

        12    12    12

    >> C{3}'

    ans =

            2005        2005        2005

    ........一下相同.....

    ............................................................

    例4:移除字符串

    对于上述scan1.txt 如果想忽略Level而直接读取数字

    >> fid = fopen('scan1.txt');

    >> C = textscan(fid, '%s Level%u8 %u %f %f %s %f');

    >>fclose(fid);

    >> C{2}'

    ans =

        1    2    3

    ....................................................................

    例5:读取某列

    >> fid = fopen('scan1.txt');

       dates = textscan(fid, '%s %*[^\n]');

       fclose(fid);

    >> dates{1}

    ans =

        '09/12/2005'

        '10/12/2005'

        '11/12/2005'

    dates是一个1*1的细胞矩阵

    %[^\n] 就是一直读到行尾。

    如:

    >>fid = fopen('scan1.txt');

    >>dates = textscan(fid, '%s %[^\n]');

    >>fclose(fid);

    >>dates{1}'

    ans =

        '09/12/2005'    '10/12/2005'    '11/12/2005'

    >> dates{2}

    ans =

        'Level1 12.34 45 1.23e10 inf Nan Yes 5.1+3i'

        'Level2 23.54 60 9e19 -inf  0.001 No 2.2-.5i'

        'Level3 34.90 12 2e5   10  100   No 3.1+.1i'

    %*[^\n] 就是从当前直接跳到行尾。

    % *是一个跳过符号,表示跳过该位

    ............................................................................

    例6:

    处理存在空数据

    实用分节符delimiter 和空值符EmptyValue

    对于exm5.txt

    1,  2,  3,  4,   ,  6

    7,  8,  9,   , 11, 12

    读取数据,空数据用-inf替换

    >> fid = fopen('exm5.txt');

    C = textscan(fid, '%f %f %f %f %f %f', 'delimiter', ',','EmptyValue', -Inf);

    fclose(fid);

    >> data=cell2mat(C)

    data =

         1     2     3     4  -Inf     6

         7     8     9  -Inf    11    12

    ...............................................................................

    例7

    跳过所有注释,选择性的把某些输入置 空

     

    exm6.txt文件如下:

    abc, 2, NA, 3, 4

    // Comment Here

    def, na, 5, 6, 7

    现在我们想要第二行的注释,并且把其中的 NA na 置为NAN

    >> fid = fopen('exm6.txt');

    >>C = textscan(fid, '%s %n %n %n %n', 'delimiter', ',', 'treatAsEmpty', {'NA', 'na'}, 'commentStyle', '//');

    >>fclose(fid);

    >> C{1}

    ans =

        'abc'

        'def'

    >> C{2:5}

    ans =

         2

       NaN

     

    ans =

       NaN

         5

     

    ans =

         3

         6

     

    ans =

         4

         7

    .................................................................................

    例8:

    处理重复的分隔符,把重复分隔符认为成一个分隔符

    exm8.txt如下:

    1,2,3,,4

    5,6,7,,8

    现在我们想把重复分隔符合并认为成单个分隔符,我们采用MultipleDelimsAsOne参数把其设置为1

    % multiple 多个  delims 分隔符  as  one

     

    >> clear

    >> fid = fopen('exm8.txt');

    C = textscan(fid, '%f %f %f %f', 'delimiter', ',', 'MultipleDelimsAsOne', 1);

    fclose(fid);

    >> data=cell2mat(C)

    data =

         1     2     3     4

         5     6     7     8

    ..........................................................................

    例9: CollectOutput Switch的应用

    CollectOutput switch的默认值是0(false)textscan函数把每列的数据放在一个细胞矩阵中

    >> clear

    >> fid = fopen('grades.txt');

    C_text = textscan(fid, '%s', 4, 'delimiter', '|');  % read column headers

    >>

    C_data0 = textscan(fid, '%d %f %f %f')      % read numeric data 在此fid指向了第二行

    C_data0 =

        [4x1 int32]    [4x1 double]    [4x1 double]    [4x1 double]

    >> C_data0{1:4}

    ans =

               1

               2

               3

               4

     

    ans =

       91.5000

       88.0000

       76.3000

       96.4000

     

    ans =

       89.2000

       67.8000

       78.1000

       81.2000

     

    ans =

       77.3000

       91.0000

       92.5000

       84.6000

     

    现在我们利用CollectOutput switch置为1,这样就可以把同类数据放在同一个细胞数组下

     

    >> frewind(fid);  %fid指到文档开始位置

    C_text = textscan(fid, '%s', 4, 'delimiter', '|');

    C_data1 = textscan(fid, '%d %f %f %f','CollectOutput', 1)

    C_data1 =

        [4x1 int32]    [4x3 double]

    >> C_data1{1}

    ans =

               1

               2

               3

               4

    >> C_data1{2}

    ans =

       91.5000   89.2000   77.3000

       88.0000   67.8000   91.0000

       76.3000   78.1000   92.5000

       96.4000   81.2000   84.6000

    ......................................................................................

    其实还有两个对字符串的操作,鉴于不经常用,故此略去,欢迎留言补充。

     

    源文档 <http://blog.sina.com.cn/s/blog_9e67285801010buf.html>

    转载于:https://www.cnblogs.com/AI-Algorithms/p/3670245.html

    展开全文
  • 1、基本语法textscan的基本语法是:C = textscan(fid, 'format')C = textscan(fid, 'format', N)其中fid为fopen命令返回的文件标识符,这也是和textread的最大不同之处,需要注意的一点是,fid类似一个指针,其指向...

    1、基本语法

    textscan的基本语法是:

    C = textscan(fid, 'format')

    C = textscan(fid, 'format', N)

    其中fid为fopen命令返回的文件标识符,这也是和textread的最大不同之处,需要注意的一点是,fid类似一个指针,其指向的位置会随着textscan的操作而改变,每读取一次数据,它的位置就会指向你已经读过的那个数据的后面。format实际上就是一个字符串变量,表示读取数据及数据转换的规则。N为按照读取格式format读取的次数。

    textread的基本语法是:

    [A,B,C,…] = textread(filename,format)

    [A,B,C,…] = textread(filename,format,N)

    其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。

    必须严格遵守用法不可出现data=textread(filename,format,N)的形式

    其中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,…] = textread(filename,format,N)的语法,读取N次。

    2,两者的区别

    可以看出这个两个函数最大的区别就是:textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。而使用textscan函数之前需要先用fopen函数打开要读取的文件并返回句柄fid。

    其次textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。而textscan函数每次读完数据后,其对应的句柄fid都是指向接下来要读数据的地方,类似于C函数中的文件读取指针,这样更方便于读取文本时的精确控制。

    再次,textscan函数可以将多组数据读到一个元胞矩阵中,而textread函数只能将数据分别读取到不同的向量中。比如一个含有10行3列浮点数的文件,textscan函数可以将之读取到一个变量名A下 A=textscan(fid, '%f%f%f'), 而使用textread函数必须将之读入到三个变量名中  [A,B,C] = textread(filename,'%f%f%f')。

    3,几个方便的语法

    假设文件myfile.txt 中的内容如下

    Sally Type1 12.34 45 Yes

    Joe Type2 23.54 60 No

    Bill Type1 34.90 12 No

    3.1将其分别使用textread 和textscan读出:

    [data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s%f%d%s');使用textread函数分别将数据按照格式读入到data1—data5中。然后可使用赋值语句data=[data1 data2 data3 data4 data5 data6]生成一个二维数组data。

    fid = fopen('myfile.txt');

    C = textscan(fid, '%s%s%f%d%s');

    fclose(fid);使用textscan函数读取文件,输出C为1*5的细胞数组,每个数组中存放每列的数据

    3.2如果只读取第一列的数据,可使用如下语句:

    [names]=textread('myfile.txt','%s%*[^n]');

    %*[^n] 表示从当前直接跳到行尾,而使用%[^n]则表示一直读到行尾,% *是一个跳过符号,表示跳过该位。例如在读取上述文件过程中只读取浮点数的整数位,可使用如下两种语句,将小数点在内的小数部分看作浮点数或者字符串,读取是略过。

    [data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s-%*f%d%s');

    或者

    [data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s-%*s%d%s');

    3.3另外如果我想略过若干行之后才开始读取数据的话,可以使用headerlines命令定义略过的行数。如果数据之间不是使用空格作为分隔符的话,可以使用delimiter命令定义各种分隔符。

    'headerlines',1,'delimiter',';'

    3.4如果我想读取文件中70行70列的文件该怎么办呢? 当然我们可以在函数中format处写上70个%f,但这样太麻烦了。有一种简单的方法就是使用下面的函数。

    FormatString=[repmat(' %f',1,70)];

    ez = cell2mat(textscan(f1,FormatString,70,'HeaderLines',3));

    第一句话表示定义一个含有70个%f的字符串,第二句话的意思是 将此字符串作为读取格式,按照这个格式读取70次,并忽略文件中的前三行。 由于textscan只是把数据读到了一个元胞数组中了,需要使用cell2mat函数将这里面的所有 cell组合成一个数组。

    暂时以上叙述到的东西应该够我今后进行数据处理了。如果想阅读更为详细的说明的话,除了matlab的帮助文档外,以下几篇日志也非常不错:

    textscan

    http://blog.sina.com.cn/s/blog_9e67285801010buf.html

    http://www.douban.com/note/6181453

    textread

    http://itlab.idcquan.com/linux/administer/872894.html

    http://blog.sina.com.cn/s/blog_9e67285801010bju.html

    展开全文
  • Matlab中的textread textscan读取文本文件2011/02/17 06:58 A.M.From:/blog/static/34776762011013111354235/1.MATLAB从文本文件中读取格式化的数据函数是textread。调用方式[A,B,C,...] = textread('filename','...

    Matlab中的textread textscan读取文本文件

    2011/02/17 06:58 A.M.

    From:/blog/static/34776762011013111354235/

    1.MATLAB从文本文件中读取格式化的数据函数是textread。

    调用方式

    [A,B,C,...] = textread('filename','format')

    [A,B,C,...] = textread('filename','format',N)

    [...] = textread(...,'param','value',...)

    输入参数

    'filename' 需要读取的数据文件

    'format' 每行各个数据格式

    N 读取数据时使用N次。

    当调用textread函数时会按照指定的格式从'filename'中读取数据,并将数据分别保存在变量A,B,C中,直到文件内容被读完为止。

    下面是读取c:\中的test3.txt文件操作。

    >> !type c:\test3.txt

    Q1 1 2

    Q2 3 4

    >> [a1 a2 a3]=textread('c:\test3.txt','%s %f %f')

    a1 =

    'Q1'

    'Q2'

    a2 =

    1

    3

    a3 =

    2

    4

    这样文件test3.txt中的每行分别读入变量a1、a2、a3。

    2.TextScan函数读取文本数据

    对于具有多行文字说明文本数据文件,最好的办法则是用textscan,或者fscanf读取。

    调用方式

    C = textscan(fid, 'format')

    C = textscan(fid, 'format', N)

    C = textscan(fid, 'format', param, value, ...)

    C= textscan(fid, 'format', N, param, value, ...)

    输入参数

    fid 为fopen命令返回的文件标识符

    format 是一个字符串变量,表示读取数据及数据转换的规则。Format中包含了多种方式,其内容如表6.5所示。

    format内容

    数据转换规则

    说 明

    %n

    读取一个数字并转换为double

    %d

    读取一个数据并转换为int32

    %d8

    读取一个数据并转换为int8

    %d16

    读取一个数据并转换为int16

    %d32

    读取一个数据并转换为int32

    %d64

    读取一个数据并转换为int64

    %u

    读取一个数据并转换为uint32

    %u8

    读取一个数据并转换为uint8

    %u16

    读取一个数据并转换为uint16

    %u32

    读取一个数据并转换为uint32

    %u64

    读取一个数据并转换为uint64

    %f4

    读取一个数字并转换为double

    %f32

    读取一个数字并转换为float

    %f64

    读取一个数字并转换为double

    %s

    读取一个字符串

    %q

    读取一个可以是双引号括着的字符串

    %c

    读取一个字符,包括空格

    %[…]

    读取和括号中字符串相匹配的字符。读取操作在首次遇到不匹配的字符和空格时停止。例如%[mus]把summer读成summ

    %[^…]

    读取和括号中字符串不匹配的字符。读取操作在首次遇到不匹配的字符和空格时停止。例如%[^mus]把summer读成er

    Textscan所支持的数字单元宽度声明有两种,具体如表6.6所示。

    表6.6 textscan支持的数据读入格式

    名称

    说明

    N

    读取包括小数点在内的N个数字或者遇到的分隔符,例如%5f32会把473.238读为473.2

    N.D

    读取包括小数点在内的N个数字或者遇到的分隔符,返回的数字在小数点后有D位数,例如%7.2f会把473.238读为473.23

    下面建立新文件test1.txt,文件前2行是字符串,后三行是数组,首先查看其内容。

    >> !type c:\test1.txt

    a1

    a2

    1

    2

    注意,在Command窗口下键入“!”后就可以直接执行Dos命令

    >>file=fopen('c:\test1.txt','r');%打开需要读取的文件

    >> str1=textscan(file,'%s',2) ;

    >> str1{1}

    ans =

    'a1'

    'a2

    如果需要读取第3行、第4行可以执行下面命令。

    >> da=textscan(file,'%f',[3 4])

    展开全文
  • %将文件头一行的数据名称读入 C_text = textscan(fileID,formatSpec,N,’Delimiter’,’|’); C_data0 = textscan(fileID,’%d %f %f %f’); %%%%%%%%%%%%%%%%%%%%% fileID = fopen(‘example.txt’); %过滤前两行...
  • matlab 中的textscan

    万次阅读 2018-12-14 19:09:01
    matlab 中的textscan textscan更适合读入大文件; textscan可以从文件的任何位置开始读入,而textread 只能从文件开头开始读入; textscan也可以从上一次textscan结束的位置开始读入,而textread不能; textscan只...
  • 使用带文本的csv文件使用textscan读取 最简单的方法是右键选择matlab打开csv文件,然后拖动选择需要的行列,点击导入所选内容。 想要代码的话,选中内容后,在下图划红线处点击下三角即可生成脚本。 导出的代码栗子...
  • 在这种情况下, textscan文件指针将停留在您停止的位置,因此您还可以: 读取一个块(不要关闭文件): M = textscan(fid, readFormat, nLines) 处理它然后保存你的结果(和释放内存) 使用相同的调用读取下一个块...
  • matlab读取文本文件----textscan

    万次阅读 2019-08-02 20:20:12
    textscan 从文本文件或字符串读取格式化数据 全页折叠 语法 C = textscan(fileID,formatSpec) C = textscan(fileID,formatSpec,N) C = textscan(chr,formatSpec) C = textscan(chr,formatSpec,N) C = ...
  • 不过最近才发现Matlab7的一个新指令textscan可以很方便的协助读取文字档中的字串与数据矩阵. 利用这个指令很快的就完成读取文字档中数个不同大小的数字矩阵了. textscan指令在matlab的说明档找得到说明,在此就不...
  • 通过看其他热心网友的总结帖以及自己一点实践,简单说一下使用这个两个函数时需要注意的点:1、基本语法textscan的基本语法是:C = textscan(fid, 'format')C = textscan(fid, 'format', N)其中fid为fopen命令返回的...
  • data = textscan(fileID, '%f %f %f %f','headerlines', 11);%读取第11行之后(即第12行开始)的数据 %------后面部分是编辑器的使用,忽略---------------- 欢迎使用Markdown编辑器 你好! 这是你第一次使用 ...
  • matlab中textscan跳行使用

    千次阅读 2020-12-29 09:50:56
    Matlab的textscan指令2010-03-0211:33:10最近在玩学长给的一个资料档,里头有文字和数据混何在一起,要用Matlab来读取.要是以前的话,大概就很笨的用手动的方式把文字去掉,再让Matlab来读.不过最近才发现Matlab7的一个...
  • 调用方式 C = textscan(fid, 'format') C = textscan(fid, 'format', N) C = textscan(fid, 'format', param, value, ...) C= textscan(fid, 'format', N, param, value, ...) 输入参数 fid 为fopen命令返回的文件...
  • textscan需要首先用fopen函数打开文件,然后再进行读取,而textread则是直接读取。 textscan读取完文件后,如果文件没有fclose关闭,下次再读将从上一次结束的位置继续,跟文件流的处理方式一致。而textread读取某个...
  • 调用方式 C = textscan(fid, 'format') C = textscan(fid, 'format', N) C = textscan(fid, 'format', param, value, ...) C= textscan(fid, 'format', N, param, value, ...) 输入参数 fid 为fopen命令返回的文件...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼"用户定义的 自变量";"Treatment";"Control";" ";"试验时间";"记录时间";"X 中心";"Y 中心";"面积";"区域更改";"伸长";"移动距离";"速度";"Movement(移动 /中心点)";..."...
  • 2007,Export,6,24.715 S3,ABW,0,Aruba,COL,Colombia,2007,Export,6,95.885 S3,ABW,0,Aruba,DOM,Dominican Republic,2007,Export,6,11.432 我想使用textscan将其读入MATLAB,仅使用第2,3,5列(从第二行开始)并编写...
  • 问题I have an input file which has rows of integers like this:1 2 34 5 67 8 9I want to read in the file, I have used the textscan function for this kind of task before.But there are a few lines in the...
  • param = textscan(fid,'%s','delimiter',' '); rows = param{1,1}; fclose(fid); % overwrite to new file fid = fopen('filename.txt','w'); fprintf(fid, '%s ', rows{:}); fclose(fid); 输出文件在每一行的开头...
  • %// Read in data with importdatadata = importdata('data1.txt') %// 'data1.txt' is the input text file%// Split datasplit_data = cellfun(@(x) strsplit(x,' '),data,'Uni',0)N = numel(split_data) %// numb...
  • Processed_data1 = textscan(f1, '%s', 'Delimiter',','); fclose(f1); &#34; MvsL \ MvsL_Combined_OutputGaus.csv&#34;和&#34; MvsL \ MvsL_Summary_Gausians_for_individual_proteins.csv&#34;是已存在...
  • 问题如上,sMRI影像,拟做VBM分析。在segment过程中报错,停止运行。 <p style="text-align:center"><img alt="" height=... 作为新手,尝试了更换运行图像(...spm12和cat12是最新版</p>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,071
精华内容 428
关键字:

textscan