このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
sscanf
書式付きデータの文字列からの読み込み
構文
説明
は A
= sscanf(str
,formatSpec
)str
からデータを読み取り、formatSpec
で指定した書式に従って変換し、その結果を配列で返します。str
は文字配列または string スカラーです。関数 sscanf
は formatSpec
を str
の一連の文字に繰り返し適用します。この処理は、str
の最後に達するか、formatSpec
が一連の文字と一致しなかった場合に終了します。str
が複数行がある文字配列である場合、関数 sscanf
は列順に文字を読み取ります。
は、出力配列のサイズを A
= sscanf(str
,formatSpec
,sizeA
)sizeA
に設定し、データを str
から出力配列に読み取ります。sizeA
は正の整数であるか、[m n]
の形式でなければなりません (m
と n
は正の整数)。
例
文字ベクトルの数値への変換
複数の数値を空白文字で区切って表す文字ベクトルを作成します。この文字ベクトルを数値の列ベクトルに変換します。sscanf
は空白文字を数値間の区切り文字として扱います。
chr = '2.7183 3.1416 0.0073'
chr = '2.7183 3.1416 0.0073'
A = sscanf(chr,'%f')
A = 3×1
2.7183
3.1416
0.0073
テキストを変換して出力配列のサイズを変更
複数の数値を表す string を作成し、sscanf
を使用して変換します。出力配列のサイズを指定します。
str = "2.7183 3.1416 0.0073"
str = "2.7183 3.1416 0.0073"
A = sscanf(str,'%f',[1 3])
A = 1×3
2.7183 3.1416 0.0073
str
を 2 行 2 列の行列に変換します。str
は 3 つの数値しか表さないため、sscanf
は A
を 0 でパディングし、行列を埋めます。
A = sscanf(str,'%f',[2 2])
A = 2×2
2.7183 0.0073
3.1416 0
テキストで検出された要素のカウント
空白文字で区切られた数値を含む string を作成します。sscanf
がこの string を数値に変換する際に出力配列に挿入した要素をカウントします。
str = "78 72 64 66 49"
str = "78 72 64 66 49"
出力配列 A
の要素をカウントします。%d
演算子を使用してこの string の数値を変換します。%d
は空白文字で区切られた整数と一致します。A
の要素数を返すには、2 番目の出力引数を指定します。
[A,n] = sscanf(str,'%d')
A = 5×1
78
72
64
66
49
n = 5
エラー メッセージの表示
string を作成し、そこからデータを読み取ります。sscanf
が入力 string 全体を変換できなかった場合、エラー メッセージを表示します。
str = "3.14159 are the first 6 digits of pi"
str = "3.14159 are the first 6 digits of pi"
str
の数値を変換します。str
には %f
と一致しない文字も含まれているため、sscanf
はエラー メッセージを返します。sscanf
は 'are'
という単語を検出すると、この単語を数値に変換できないため、処理を停止します。
[A,n,errmsg] = sscanf(str,'%f')
A = 3.1416
n = 1
errmsg = 'Matching failure in format.'
最後のスキャン位置を返す
文字ベクトルを作成し、そこからデータを読み取ります。sscanf
が入力全体を変換できなかった場合、sscanf
が停止した位置の直後のインデックスを返します。このインデックスを使用して、スキャンされなかった入力を表示します。
chr = '3.14159 are the first 6 digits of pi'
chr = '3.14159 are the first 6 digits of pi'
chr
内のデータを変換します。インデックスを返します。
[A,~,~,nextindex] = sscanf(chr,'%f')
A = 3.1416
nextindex = 9
chr
の文字のうち sscanf
がスキャンしなかったものを表示します。
chr(nextindex:end)
ans = 'are the first 6 digits of pi'
指定した文字との一致
複数の温度を含む string を作成します。温度は度記号と文字 F
で表します。この温度を数値配列に変換します。
度記号 (char(176)
) を挿入するには、関数 insertBefore
を使用します。
T = "78F 72F 64F 66F 49F"; degreeSymbol = char(176); T = insertBefore(T,'F',degreeSymbol)
T = "78°F 72°F 64°F 66°F 49°F"
温度を数値配列として返します。
A = sscanf(T,strcat("%d",degreeSymbol,"F"))
A = 5×1
78
72
64
66
49
入力引数
str
— スキャンする入力テキスト
文字配列 | string スカラー
スキャンする入力テキスト。文字配列または string スカラーとして指定します。str
が文字配列の場合、行が複数存在することがあり、sscanf
は列順に文字を読み取ります。
データ型: char
| string
formatSpec
— 入力フィールドの書式
書式演算子
入力フィールドの書式。書式演算子として指定します。formatSpec
は一重引用符で囲まれた文字ベクトル、または string スカラーにすることができます。
数値フィールド
次の表は、テキストを数値出力に変換するために使用可能な変換指定子の一覧です。sscanf
は値を 10 進数表現 (基数 10) に変換します。
数値フィールド タイプ | 変換指定子 | 説明 |
---|---|---|
整数、符号付き |
| 基数 10。 |
| この値により基数が決定されます。
| |
| 64 ビットの値、基数 10、8、16。 | |
整数、符号なし |
| 基数 10。 |
| 基数 8 (8 進数)。 | |
| 基数 16 (16 進数)。 | |
| 64 ビットの値、基数 10、8、16。 | |
浮動小数点数 |
| 浮動小数点値。入力フィールドには、次のどれでも含めることができます (大文字と小文字の区別なし)。 |
文字フィールド
次の表は、テキストを変換して出力を文字配列にするために使用可能な変換指定子の一覧です。
文字フィールド タイプ | 変換指定子 | 説明 |
---|---|---|
文字ベクトルまたは string スカラー |
|
|
| 空白も含め、任意の 1 文字を読み取ります。 | |
パターンマッチング |
| 大かっこ内の文字のみを、不一致文字または空白に達するまで読み込みます。 例: |
formatSpec
に数値と文字の指定子の組み合わせが含まれる場合、sscanf
は各文字をそれに相当する数値に変換します。
オプションの演算子
無視するフィールドと文字
sscanf
は、特定のフィールドまたはフィールドの一部を無視するように指示していない限り、すべての数値および文字を順番に読み取ります。フィールドをスキップするには、パーセント記号 (%
) の後にアスタリスク (*
) を挿入します。たとえば、整数をスキップするには、%*d
を指定します。フィールド幅
一度に読み取る桁またはテキスト文字の最大数を指定するには、パーセント文字の後に数値を挿入します。たとえば、
%10c
は一度に最大 10 文字 (空白を含む) を読み取ります。%4f
は、一度に最大 4 桁 (小数点を含む) を読み取ります。無視するリテラル テキスト
sscanf
は変換指定子の直前または直後にある指定テキストを無視します。例:
Level%u
は'Level1'
を1
として読み取ります。例:
%uStep
は'2Step'
を2
として読み取ります。
データ型: char
| string
sizeA
— 出力配列の次元
Inf
(既定値) | 整数 | 2 要素の行ベクトル
出力配列 A
の次元。Inf
、正の整数または 2 要素の行ベクトルとして指定します。
入力 | 説明 |
---|---|
| 入力を最後まで読み取ります。 |
| 最大 |
| 最大 |
データ型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
出力引数
A
— 出力データ
列ベクトル | 行列 | 文字配列
出力データ。列ベクトル、行列または文字配列として返されます。A
のクラスとサイズは、formatSpec
で指定した変換と、sizeA
で指定した出力配列のサイズにより異なります。
formatSpec
に数値指定子のみが含まれる場合、A
は数値列ベクトルになります。sizeA
引数も指定すると、A
は指定したサイズの行列になり、必要であれば 0 でパディングされます。入力の値の数がsizeA
より少ない場合、A
のサイズはsizeA
より小さくなります。代わりに、これは入力からスキャンした値を格納するために必要なサイズとなります。formatSpec
に 64 ビットの符号付き整数指定子のみが含まれる場合、A
のクラスはint64
になります。formatSpec
に 64 ビットの符号なしの整数指定子のみが含まれる場合、A
のクラスはuint64
になります。それ以外の場合、
A
はクラスdouble
です。
formatSpec
に%c
または%s
指定子のみが含まれている場合、A
は文字ベクトルになります。sizeA
も指定すると、A
は文字配列になり、必要であれば null 文字でパディングされます (null 文字は値が 0 の制御文字です)。入力の文字数がsizeA
より少ない場合、A
のサイズはsizeA
より小さくなります。代わりに、これは入力からスキャンした文字を格納するために必要なサイズとなります。formatSpec
に数値と文字の指定子の組み合わせが含まれる場合、A
はクラスdouble
の数値になり、sscanf
は各文字をそれに相当する数値に変換します。この変換は、formatSpec
がすべての数値フィールドを明示的にスキップする場合 (たとえば、formatSpec
が'%*d %s'
の場合) でも発生します。sscanf
がすべての入力をformatSpec
と一致させられなかった場合、A
は数値または文字配列になります。A
のクラスは、処理が終了する前にsscanf
が読み取る値によって異なります。
データ型: double
| int64
| uint64
| char
n
— 出力配列に読み取られた要素の数
整数
出力配列に読み取られた要素の数。整数として返されます。
データ型: double
errmsg
— エラー メッセージ
文字ベクトル
エラー メッセージ。文字ベクトルとして返されます。str
に sscanf
が変換できないデータが含まれている場合、errmsg
にはエラー メッセージが含まれます。sscanf
がすべてのデータを正常に変換した場合、errmsg
は空の文字ベクトルになります。
データ型: char
nextindex
— スキャンした最後の文字の後の位置
整数
スキャンした最後の文字の後の位置。整数として返されます。
データ型: double
ヒント
関数
sscanf
およびfscanf
の読み取りに対する書式指定子は、関数sprintf
およびfprintf
の書き込み用の形式とは異なります。読み取り関数は精度フィールドをサポートしません。幅フィールドは、書き込み用には最小値を、読み取り用には最大値を指定します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
入力引数
formatSpec
は定数でなければなりません。%s
および%[...]
変換指定子はサポートされません。出力引数
errmsg
およびnextinput
はサポートされません。動的メモリ割り当てをオフにする場合は、入力引数
sizeA
を指定する必要があります。この引数は定数でなければなりません。生成されたコードの動作が MATLAB® と異なる可能性があります。このような場合、生成されたコードの動作は、C 言語の
sscanf
の動作と一致します。以下にいくつかの例を示します。生成されたコードでは、
sscanf
が null バイトを読み取ると、返される値が切り捨てられる場合があります。整数値
x
を、intmax
がx
より小さい整数形式に読み込むと、MATLAB 出力はintmax
で飽和します。生成されたコードでは、この飽和でオーバーフローが発生する場合があります。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)