ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

textscan

テキスト ファイルまたは文字列から書式付きデータを読み取る

構文

  • C = textscan(fileID,formatSpec)
  • C = textscan(fileID,formatSpec,N)
  • C = textscan(str,formatSpec)
  • C = textscan(str,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) は、formatSpecN 回使用して、ファイル データを読み取ります。ここで N は正の整数です。N 回反復した後でファイルから追加のデータを読み取るには、元の fileID を使用して textscan を再度呼び出します。同じファイル識別子 (fileID) で関数 textscan を呼び出してファイルのテキスト スキャンを再開すると、textscan は、最後の読み取りを終了したポイントから自動的に読み取りを再開します。

C = textscan(str,formatSpec) は文字列 str からデータを読み取り、セル配列 C に格納します。文字列の場合は、textscan を繰り返し呼び出すと、毎回始めからスキャンが再開されます。前回の位置からスキャンを再開するには、position 出力を要求します。

textscan は、文字列 str 内のデータを変換指定子の文字列 formatSpec と一致させようとします。

C = textscan(str,formatSpec,N) は、formatSpecN 回使用して、文字列データを読み取ります。ここで N は正の整数です。

C = textscan(___,Name,Value) は、前述の構文の入力引数のいずれかに加え、1 つまたは複数の Name,Value のペアの引数を使用して、オプションを指定します。

[C,position] = textscan(___) は、前述の構文のいずれかの入力引数を使用して、ファイルまたは文字列の位置を 2 番目の出力引数としてスキャンの終了時に返します。ファイルの場合、これは textscan を呼び出した後で ftell(fileID) から返される値です。文字列の場合、position は、関数 textscan により読み込まれた文字数を示します。

すべて折りたたむ

浮動小数点数の文字列を読み取ります。

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

formatSpec 文字列 '%f' は、textscanstr 内の各フィールドを倍精度浮動小数点と一致させるよう指示します。

セル配列 C の内容を表示します。

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

 

同じ文字列を読み取り、各値を 10 進数の 1 桁に切り捨てます。

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

指定子 %3.1f は、フィールド幅が 3 桁で精度が 1 であることを示します。関数 textscan は、小数点および小数点以下 1 桁を含めた合計 3 桁を読み取ります。指定子 %*1d により、残りの桁をスキップすることを textscan に指示されます。

セル配列 C の内容を表示します。

celldisp(C)
 
C{1} =
 
    0.4000
    8.2000
    3.5000
    6.2000
    9.2000

 

テキスト エディターを使用して、次の形式でデータを含むファイル scan1.dat を作成します。

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

ファイルを開き、各列を適切な変換指定子で読み取ります。

fileID = fopen('scan1.dat');
C = textscan(fileID,'%s %s %f32 %d8 %u %f %f %s %f');
fclose(fileID);
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

関数 textscan は、1 行 9 列のセル配列 C を返します。

C 内の各セルの MATLAB® データ型を表示します。

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}C{2} はセル配列です。C{5} はデータ型 uint32 であるため、C{5} のはじめの 2 要素は、32 ビット符号なし整数の最大値または intmax('uint32') です。

前の例のデータの 2 列目にある各フィールドから、テキスト 'Level' を除去します。

formatSpec 入力のリテラル文字列を一致させます。

fileID = fopen('scan1.dat');
C = textscan(fileID,'%s Level%d %f32 %d8 %u %f %f %s %f');
fclose(fileID);
C{2}
ans =

           1
           2
           3

C 内の 2 番目のセルの MATLAB データ型を表示します。

class(C{2})
ans =

int32

1 行 9 列のセル配列 C の 2 番目のセルは、データ型が int32 になります。

前の例のファイル内にある最初の列をセル配列に読み取り、残りの部分をスキップします。

fileID = fopen('scan1.dat');
dates = textscan(fileID,'%s %*[^\n]');
fclose(fileID);
dates{1}
ans = 

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

関数 textscan は、1 行 1 列のセル配列 dates を返します。

テキスト エディターを使用して、コンマ区切りファイル data.csv を作成します。

1,  2,  3,  4,   ,  6
7,  8,  9,   , 11, 12

ファイルを読み取り、空のセルを -Inf に変換します。

fileID = fopen('data.csv');
C = textscan(fileID,'%f %f %f %f %u8 %f',...
'Delimiter',',','EmptyValue',-Inf);
fclose(fileID);
column4 = C{4}, column5 = C{5}
column4 =

     4
  -Inf


column5 =

    0
   11

関数 textscan は、1 行 6 列のセル配列 C を返します。関数 textscan は、C{4} の空の値を -Inf に変換します。ここで C{4} は浮動小数点形式に関連付けられています。MATLAB は符号なし整数 -Inf0 と表示するため、関数 textscanC{5} 内の空の値を -Inf ではなく 0 に変換します。

テキスト エディターを使用して、次の行を含むコンマ区切りのファイル data2.csv を作成します。

abc, 2, NA, 3, 4
// Comment Here
def, na, 5, 6, 7

textscan がコメントまたは空の値として扱う入力を指定します。

fileID = fopen('data2.csv');
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

テキスト エディターを使用して、次の内容を含むファイル data3.csv を作成します。

1,2,3,,4
5,6,7,,8

連続するコンマを 1 つの区切り記号として扱うには、MultipleDelimsAsOne パラメーターを使用して値を 1 (true) に設定します。

fileID = fopen('data3.csv');
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

テキスト エディターを使用して、次の内容を含むファイル grades.txt を作成します。

Student_ID  | Test1  | Test2  | Test3
   1           91.5     89.2     77.3
   2           88.0     67.8     91.0
   3           76.3     78.1     92.5
   4           96.4     81.2     84.6

形式 '%s' を使用した列ヘッダーを 4 回読み取ります。

fileID = fopen('grades.txt');

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

ファイルから数値データを読み取ります。

C_data0 = textscan(fileID,'%d %f %f %f')
C_data0 = 
  [4x1 int32]    [4x1 double]    [4x1 double]    [4x1 double]

CollectOutput の既定値は 0 (false) であるため、関数 textscan は数値データの各列を個別の配列に返します。

ファイルの位置指定子をファイルの先頭に設定します。

frewind(fileID);

同じクラスの連続する列が 1 つの配列に収集されるように、ファイルを再度読み取り、CollectOutput1 (true) に設定します。関数 repmat を使用して、%f 変換指定子を 3 回繰り返すように指定できます。この方法は、形式を何度も繰り返す場合に便利です。

C_text = textscan(fileID,'%s',N,'Delimiter','|');

C_data1 = textscan(fileID,['%d',repmat('%f',[1,3])],'CollectOutput',1)
C_data1 = 
    [4x1 int32]    [4x3 double]

すべて double のテスト スコアが 1 つの 4 行 3 列の配列に収集さされます。

ファイル grades.txt を閉じます。

fclose(fileID);

テキスト ファイルからデータの最初の列と最後の列を読み取ります。文字列の列と整数データの列をスキップします。

テキスト エディターで、names.txt という名前のコンマ区切り形式のテキスト ファイルを作成します。このファイルは以下の内容を含みます。

"Smith, J.","M",38,71.1
"Bates, G.","F",43,69.3
"Curie, M.","F",38,64.1
"Murray, G.","F",40,133.0
"Brown, K.","M",49,64.9

ファイルからデータの最初の列と最後の列を読み取ります。変換指定子 %q を使用して、二重引用符 (") で囲まれた文字列を読み取ります。%*q は引用符で囲まれた文字列をスキップし、%*d は整数フィールドをスキップし、%f は浮動小数点数を読み取ります。'Delimiter' の名前と値のペア引数を使用して、コンマ区切り記号を指定します。

fileID = fopen('names.txt','r');
C = textscan(fileID,'%q %*q %*d %f','Delimiter',',');
fclose(fileID);
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

textscan は 1 行 2 列のセル配列 C を返します。文字列を囲んだ二重引用符は削除されます。

コンマ区切り値を格納した myfile.txt という名前のサンプル ファイルを作成します。値の最初の列にドイツ語の日付を、2 番目と 3 番目の列には数値を指定します。

fileID = fopen('myfile.txt','w','n','ISO-8859-15');
fprintf(fileID,'1 Januar 2014, 20.2, 100.5 \n');
fprintf(fileID,'1 Februar 2014, 21.6, 102.7 \n');
fprintf(fileID,'1 März 2014, 20.7, 99.8 \n');
fclose(fileID);

サンプル ファイルは次のようになります。

1 Januar 2014, 20.2, 100.5
1 Februar 2014, 21.6, 102.7
1 März 2014, 20.7, 99.8

ファイルを開きます。ファイルに関連する文字エンコード スキームを、fopen の最後の入力に指定します。

fileID = fopen('myfile.txt','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 の最初のセルの内容を表示します。

C{1}
ans = 

   01 January 2014 
   01 February 2014
   01 March 2014   

現在のシステム ロケールに応じて、MATLAB の使用言語で日付が表示されます。

関数 sprintf を使用して、データ内にある既定でないエスケープ シーケンスを変換します。

フォーム フィード文字 \f を含む文字列を作成します。その後、関数 textscan を使用して文字列を読み取るため、関数 sprintf を呼び出してフォーム フィードを明示的に変換します。

lyric = sprintf('Blackbird\fsinging\fin\fthe\fdead\fof\fnight');
C = textscan(lyric,'%s','delimiter',sprintf('\f'));
C{1}
ans = 

    'Blackbird'
    'singing'
    'in'
    'the'
    'dead'
    'of'
    'night'

関数 textscan は、1 行 1 列のセル配列 C を返します。

先頭以外の位置から文字列のスキャンを再開します。

文字列のテキスト スキャンを再開する場合、textscan は毎回文字列の始めから読み取ります。文字列の他の場所からスキャンを再開するには、関数 textscan の初期の呼び出しに、2 つの出力引数の構文を使用します。

たとえば、lyric という文字列を作成します。文字列の最初の語を読み取った後、スキャンを再開します。

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

関連する例

入力引数

すべて折りたたむ

開いたテキスト ファイルのファイル識別子は、数値として指定します。textscan でファイルを読み取る前に、fopen を使用してファイルを開き、fileID を取得しなければなりません。

データ型: double

データ フィールドの形式は、1 つまたは複数の変換指定子の文字列として指定します。関数 textscan はファイルまたは文字列を読み取るときに、データを formatSpec 文字列に一致させようとします。関数 textscan がデータ フィールドの一致に失敗した場合は、読み取りを中断し、中断する前に読み取ったすべてのフィールドを返します。

変換指定子の数は、出力配列 C 内のセル数を決めます。

数値フィールド

この表は、数値入力用に使用可能な変換指定子をまとめたものです。

数値入力タイプ変換指定子出力クラス
整数、符号付き%dint32
%d8int8
%d16int16
%d32int32
%d64int64
整数、符号なし%uuint32
%u8uint8
%u16uint16
%u32uint32
%u64uint64
浮動小数点数%fdouble
%f32single
%f64double
%ndouble

非数値フィールド

この表は、非数値文字を含め、文字入力に使用可能な変換指定子をまとめたものです。

文字列変換指定子詳細
文字%c区切り記号を含む任意の 1 文字を読み取ります。
テキスト文字列%s文字列を読み取ります。
%q

文字列を読み取ります。文字列が二重引用符 (") で始まる場合、最初の引用符およびその終了符号、すなわち 2 つ目の単一引用符を省略します。エスケープされた二重引用符 (例: ""abc"") を、単一の二重引用符 (例: "abc") に置き換えます。%q は、終了二重引用符の後にある二重引用符をすべて無視します。

例: '%q''"Joe ""Lightning"" Smith, Jr."''Joe "Lightning" Smith, Jr.' として読み取ります。

日付と時刻%D

上の %q と同じ方法で文字列を読み取り、datetime 値に変換します。

%{fmt}D

上の %q と同じ方法で文字列を読み取り、datetime 値に変換します。fmt は入力文字列の形式を記述します。fmt 入力は文字識別子の文字列であり、datetime の Format プロパティに有効な値です。textscan はこの形式と一致しない文字列を NaT 値に変換します。

datetime 表示形式の詳細は、datetime 配列の Format プロパティを参照してください。

例: '%{dd-MMM-yyyy}D' は、日付の形式を '01-Jan-2014' などに指定します。

カテゴリ文字列%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' の 4 つの出力セルに変換します。

    '%*ns'

    n 文字までスキップします。ここで、n はフィールド内の文字数以下の整数です。

    例: '%*3s %s' は、'abcdefg''defg' に変換します。区切り記号がコンマの場合、同じ区切り記号は 'de';'ijkl' を含んでいるセル配列に 'abcde,fghijkl' を変換します。

    '%*nc'

    区切り記号を含む、n 文字をスキップします。

  • フィールド幅

    textscan は、フィールド幅または精度で指定された文字数または桁数、あるいは最初の区切り記号までの、どちらか先に出現した方を読み取ります。小数点、記号 (+ または -)、指数文字、および数値指数の桁はフィールド幅の文字および桁としてカウントされます。複素数の場合、フィールド幅は実数部と虚数部の個々の幅を指します。虚数部の場合、フィールド幅には + または − が含まれますが、i または j は含まれません。変換指定子内のパーセント文字 (%) の後に数値を挿入して、フィールド幅を指定します。

    例: %5f'123.456'123.4 として読み取ります。

    例: %5c'abcdefg''abcde' として読み取ります。

    フィールド幅演算子を 1 つの文字と組み合わせて %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 として読み込みます。

formatSpec の適用回数。正の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

読み取る入力文字列。

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: C = textscan(fileID,formatSpec,'HeaderLines',3,'Delimiter',',') はデータの最初の 3 行をスキップし、コンマを区切り文字として扱い、残りのデータを読み取ります。

名前は大文字と小文字が区別されません。

すべて折りたたむ

データ連結を決定する論理インジケーターは、'CollectOutput' と、true または false とで構成されるコンマ区切りのペアとして指定します。true の場合、textscan は同じ基本 MATLAB クラスの連続する出力セルを 1 つの配列に連結します。

無視するテキストを示す記号は、'CommentStyle'、文字列または文字列のセル配列で構成されるコンマ区切りのペアとして指定します。

同じ行の文字列に続く文字を無視するには、1 つの文字列 ('%' など) を指定します。文字列間の文字を無視するには、2 つの文字列のセル配列 ({'/*', '*/'} など) を指定します。

textscan は、各フィールドの最初にだけコメントをチェックします (フィールド内はコメント チェック対象外です)。

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

日付を読み取るロケール。'DateLocale' で構成されるコンマ区切りのペアおよび xx_YY の形式の文字列として指定します。xx は ISO 639-1 で定義された小文字 2 文字の言語コードで、YY は ISO 3166-1 alpha-2 で定義された大文字の国コードです。ロケールの共通値の一覧については、関数 datetimeLocale 名前と値のペア引数を参照してください。

DateLocale を使用してロケールを指定します。このとき textscan は、%D 書式指定子を使用してテキストを日付として読み取るときに、月と曜日の名前および省略形を解釈しなければなりません。

例: 'DateLocale','ja_JP'

フィールドの区切り記号は、'Delimiter' と文字列または文字列のセル配列で構成されるコンマ区切りのペアとして指定します。文字列のセル配列に含まれる複数の区切り記号を指定します。

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

関数 textscan は連続する区切り文字を個別の区切り記号として解釈し、出力セルに空の値を返します。

データの各行に含まれる既定のフィールド区切り記号は空白です。空白には、スペース (' ')、バックスペース ('\b') またはタブ ('\t') 文字を組み合わせて使用することができます。区切り記号を指定しない場合、次のようになります。

  • 区切り記号文字は空白文字と同じになります。既定の空白文字は ' ''\b' および '\t' になります。'Whitespace' 名前と値のペア引数を使用し、代わりの空白文字を指定します。

  • textscan は連続する空白文字を 1 つの区切り記号と解釈します。

次のエスケープ シーケンスの 1 つを区切り記号として指定した場合、関数 textscan は、シーケンスを対応する制御文字に変換します。

\bバックスペース
\n改行
\rキャリッジ リターン
\tタブ
\\バックスラッシュ (\)

区切り付きテキスト ファイルの空の数値フィールドに返す値は、'EmptyValue' およびスカラーで構成されるコンマ区切りのペアとして指定します。

行末の文字は、'EndOfLine' と文字列で構成されるコンマ区切りのペアとして指定します。文字列は '\r\n' であるか、単一の文字を指定しなければなりません。一般的な行末文字としては、改行文字 ('\n') やキャリッジ リターン ('\r') があります。'\r\n' を指定すると、textscan\r\n またはその組み合わせ (\r\n) をすべて行末文字として解釈します。

既定の行末シーケンスは \n\r または \r\n のいずれかで、ファイルの内容によって異なります。

ファイルの最後の行の末尾に欠損値および行末シーケンスが存在する場合、textscan はそれらのフィールドに空の値を返します。これにより、出力セル配列 C 内の個々のセルが確実に同じサイズになります。

例: 'EndOfLine',':'

指数文字は、'ExpChars' と文字列で構成されるコンマ区切りのペアとして指定します。既定の指数文字は eEd および D です。

テキストのヘッダー行の数は、'HeaderLines' と正の整数で構成されるコンマ区切りのペアとして指定します。textscan はヘッダー行 (現在の行の残りを含む) をスキップします。

複数の区切り記号の取り扱いは、'MultipleDelimsAsOne'true または false で構成されるコンマ区切りのペアとして指定します。true の場合、関数 textscan は連続した区切り記号を 1 つの区切り記号として扱います。区切り記号が空白で分けられて繰り返された場合も、1 つの区切り記号として扱われます。Delimiter オプションも指定しなければなりません。

例: 'MultipleDelimsAsOne',1

関数 textscan が読み取りまたは変換に失敗したときの動作は、'ReturnOnError'true または false で構成されるコンマ区切りのペアとして指定します。true の場合、textscan はエラーを出さずに終了し、読み込んだすべてのフィールドを返します。false の場合、textscan はエラーを出して終了し、出力セル配列を返しません。

空の値として扱われる文字列は、'TreatAsEmpty'と文字列または文字列のセル配列で構成されるコンマ区切りのペアとして指定します。このオプションは数値フィールドのみに適用されます。

空白文字は、'Whitespace' と 1 つまたは複数の文字を含む文字列とで構成されるコンマ区切りのペアとして指定します。Whitespace が空で ('')、formatSpec が文字列変換指定子を含まない限り、関数 textscan は空白文字 char(32) を指定した Whitespace に追加します。

次のエスケープ シーケンスの 1 つを空白文字として指定した場合、関数 textscan は、シーケンスを対応する制御文字に変換します。

\bバックスペース
\n改行
\rキャリッジ リターン
\tタブ
\\バックスラッシュ (\)

出力引数

すべて折りたたむ

ファイルまたは文字列データは、セル配列として返されます。

formatSpec で指定された各数値変換指定子に対して、関数 textscan は、出力セル配列 C に対する K 行 1 列の MATLAB 数値ベクトルを返します。ここで、K は関数 textscan が指定子と一致するフィールドを検索する回数です。

formatSpec で指定された各文字列変換指定子に対して、関数 textscan は、K 行 1 列の文字列のセル ベクトルを返します。ここで、K は関数 textscan が指定子と一致するフィールドを検索する回数です。フィールド幅演算子を含む各文字変換で、関数 textscanKM 列の文字配列を返します。ここで M はフィールド幅です。

formatSpec で指定された各 datetime またはカテゴリカルな変換指定子に対して、関数 textscan は、出力セル配列 C に対する K 行 1 列の datetime またはカテゴリカル ベクトルを返します。ここで、K は関数 textscan が指定子と一致するフィールドを検索する回数です。

スキャン終了時のファイルまたは文字列の位置は、クラス double の整数として返されます。ファイルの場合、ftell(fileID) と指定すると、関数 textscan の呼び出し後に同じ値が返されます。文字列の場合、position は、関数 textscan により読み込まれた文字数を示します。

詳細

すべて折りたたむ

アルゴリズム

関数 textscan は、オーバーフロー、切り捨て、および NaNInf-Inf の使用に関する MATLAB の規則に応じて、数値フィールドを指定された出力タイプに変換します。たとえば、MATLAB は整数 NaN をゼロとして表示します。関数 textscan が、整数の書式指定子 (%d%u など) に関連付けられた空のフィールドを検出すると、空の値を NaN ではなくゼロとして返します

データと文字列変換指定子を照合する場合、textscan は区切り記号または行末の文字を見つけるまで読み取ります。データと数値変換指定子を照合する場合、textscan は数値以外の文字を見つけるまで読み取ります。textscan はデータを特定の変換指定子に照合できなくなると、formatSpec 文字列の次の変換指定子にデータを照合しようとします。符号 (+ または -)、指数文字および小数点は数字であると見なされます。

符号桁数小数点桁数指数文字符号桁数
符号文字が存在する場合、符号文字を 1 文字読み取ります。1 桁以上を読み取ります。小数点が存在する場合、小数点を 1 つ読み取ります。小数点が存在する場合、その直後の桁数を 1 桁以上読み取ります。指数文字が存在する場合、指数文字を 1 文字読み取ります。指数文字が存在する場合、符号文字を 1 文字読み取ります。指数文字が存在する場合、その後の桁数を 1 桁以上読み取ります。

関数 textscan は、指定した数値タイプに実数部と虚数部を変換し (%dまたは %f)、複素数全体を複素数フィールドに取り込みます。複素数の有効な形式は、以下のようになります。

±<real>±<imag>i|j

例: 5.7-3.1i

±<imag>i|j

例: -7j

組み込んだ空白を複素数に含めないでください。textscan は、組み込んだ空白をフィールドの区切り記号と解釈します。

R2006a より前に導入

この情報は役に立ちましたか?