ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

sscanf

書式付きデータの文字列からの読み込み

構文

A = sscanf(str, format)
A = sscanf(str, format, sizeA)
[A, count] = sscanf(...)
[A, count, errmsg] = sscanf(...)
[A, count, errmsg, nextindex] = sscanf(...)

説明

A = sscanf(str, format) は、文字列 str からデータを読み取り、format に従って変換し、配列 A に結果を返します。関数 sscanf は、str の終端に到達するか、format の一致に失敗するまで format を適用し続けます。fscanf が、format をデータに一致できない場合、A に一致する部分のみを読み込み、処理を停止します。str が複数行がある文字配列である場合、関数 sscanf は列順に文字を読み取ります。

A = sscanf(str, format, sizeA) は、sizeA 要素を A に読み取ります。ここで、sizeA は、整数であることも、[m,n] の形式を取ることもできます。

[A, count] = sscanf(...) は、sscanf が正常に読み取った要素の数を返します。

[A, count, errmsg] = sscanf(...) は、演算に失敗した場合にエラー メッセージ文字列を返します。演算が問題なく終了した場合は、errmsg は空の文字列になります。

[A, count, errmsg, nextindex] = sscanf(...) は、str 内でスキャンされた文字の数に 1 を足した数を返します。

入力引数

format

要素 (フィールド) の各タイプを記述する単一引用符に囲まれた文字列。以下の指定子の 1 つまたは複数を含みます。

フィールド タイプ指定子詳細

整数、符号付き

%d

基数 10

%i

値から判別される基数。既定では基数 10 になります。最初の数字が 0x または 0X の場合は基数 16 です。最初の数字が 0 の場合は基数 8 です。

%ld または %li

64 ビットの値、基数 10、8、16

整数、符号なし

%u

基数 10

%o

基数 8 (8 進法)

%x

基数16 (16 進法)

%lu, %lo, %lx

64 ビットの値、基数 10、8、16

浮動小数点数

%f

浮動小数点フィールドには、次のどれでも含めることができます (大文字と小文字の区別なし)。Inf-InfNaN-NaN

%e

%g

文字列

%s

空白が出現するまで一連の文字を読み込みます。

%c

空白も含め、1 つの文字を読み込みます
(複数の文字を読み込むには、フィールド長を指定します)。

%[...]

最初の一致しない文字または空白が出現するまで、中かっこ内の文字のみを読み込みます。

オプションで

  • フィールドをスキップするには、パーセント記号 (%) の後にアスタリスク (*) を挿入します。たとえば、整数をスキップするには、%*d を指定します。

  • フィールドの最大幅を指定するには、数字を入力します。たとえば、%10c は空白も含め一度に 10 文字を読み込みます。

  • 特定の文字セットをスキップするには、形式にリテラル文字を挿入します。たとえば、'pi=3.14159' から浮動小数点数のみを読み込むには、'pi=%f'形式を指定します。

sizeA

出力配列 A の次元。以下のいずれかの形式を指定します。

inf

入力文字列の最後まで読み込みます。(既定の設定)

n

最大 n 個の要素まで読み込みます。

[m,n]

列順に最大 m*n の要素まで読み込みます。ninf をとる場合がありますが、m は inf をとることはできません。

format%s がある場合、A には n 列以上の列を含むことができます。n は、文字ではなく、要素を表します。

str

文字列

出力引数

A

配列。形式に含まれる値が、

  • 数値指定子のみの場合、A は数値です。format に 64 ビットの符号付き整数指定子のみが含まれる場合、A のクラスは int64 です。同様に、format に 64 ビットの符号なし整数指定子のみが含まれる場合、A のクラスは uint64 です。それ以外の場合、A はクラス double です。sizeAinf または n の場合、A は列のベクトルです。入力に含まれている要素が sizeA より少ない場合、MATLAB®A をゼロでパディングします。

  • 文字または文字列指定子のみの場合 (%c または %s)、A は文字の配列です。sizeAinf または n の場合、A は行のベクトルです。入力に含まれている要素が sizeA 文字より少ない場合、MATLAB は Achar(0) でパディングします。

  • 数値と文字の指定子の組み合わせの場合、A はクラス double の数値です。MATLAB は各文字をそれに相当する数値に変換します。この変換は、形式 がすべての数値を明示的にスキップする (たとえば、'%*d %s'形式) 場合でも発生します。

MATLAB が形式への入力を照合できず、形式に数値と文字の両方の指定子が含まれている場合、A は数値または文字です。A のクラスは、処理が終了する前に MATLAB が読み込む値によって異なります。

count

sscanfA に読み込んだ要素の数。

errmsg

sscanf が指定されたファイルを開けない場合のエラー メッセージ文字列。ファイルを開けた場合は空の文字列となります。

nextindex

sscanf は、sscanfstr から読み込んだ文字数をカウントし、1 を加えます。

例 1

文字列から複数の浮動小数点値を読み込みます。

s = '2.7183  3.1416';
A = sscanf(s,'%f')
A =
    2.7183
    3.1416

例 2

文字列から、接頭辞 '0' で識別される 8 進法整数を %i を使用して符号を維持しながら読み取ります。

sscanf('-010','%i')
ans =
    -8

例 3

2 次元文字配列から数値を読み取ります。既定の設定では、sscanf は、列順に文字を読み取ります。値の元の順序を維持するには、一度に 1 行ずつ読み取ります。

mixed = ['abc 45 6 ghi'; 'def 7 89 jkl'];

[nrows, ncols] = size(mixed);
for k = 1:nrows
    nums(k,:) = sscanf(mixed(k,:), '%*s %d %d %*s', [1, inf]);
end;

% type the variable name to see the result
nums =
    45     6
     7    89

例 4

sscanf は、次と一致するものを 1 件検出します。 %s

[str count] = sscanf('ThisIsOneString', '%s')
str =
    ThisIsOneString
count =
     1

sscanf は、%s の 4 件の一致を検出します。空白文字を一致させないため、出力文字列には空白が含まれません。

[str count] = sscanf('These Are Four Strings', '%s')
str =
    TheseAreFourStrings
count =
     4

sscanf は、%s の 5 単語の一致と、%c の 4 件の空白文字の一致を検出します。%c 指定子は、空白文字を一致させるため、出力文字列に空白が含まれます。

[str count] = sscanf('Five strings and four spaces', '%s%c')
str =
    Five strings and four spaces
count =
    9

sscanf は、%s の 3 単語の一致と、%d の 2 件の数値の一致を検出します。書式指定子には %d と %s 書式が組み合わされているため、sscanf は数値以外のすべての文字を数値に変換します。

[str count] = sscanf('5 strings and 4 spaces', '%d%s%s%d%s');
str'
  Columns 1 through 9
     5   115   116   114   105   110   103   115    97
  Columns 10 through 18
   110   100     4   115   112    97    99   101   115
count
count =
     5

例 5

[str, count] = sscanf('one two three', '%c')
str =
    one two three
count =
    13

[str, count] = sscanf('one two three', '%13c')
str =
    one two three
count =
     1

[str, count] = sscanf('one two three', '%s')
str =
    onetwothree
count =
     3

[str, count] = sscanf('one two three', '%1s')
str =
    onetwothree
count =
    11

例 6

tempString = '78°F 72°F 64°F 66°F 49°F';

degrees = char(176);
tempNumeric = sscanf(tempString, ['%d' degrees 'F'])'
tempNumeric =
    78    72    64    66    49

詳細

すべて展開する

ヒント

  • 関数 sscanf および fscanf の読み取りに対する形式指定子は、関数 sprintf および fprintf の書き込み用の形式とは異なります。読み取り関数は精度フィールドをサポートしません。幅フィールドは、書き込み用には最小値を、読み取り用には最大値を指定します。

参考

| |

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