readstruct
ファイルから構造体配列を作成する
説明
は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、S = readstruct(filename,Name,Value)filename のファイル拡張子が .xml でないときに、S = readstruct(filename,FileType="xml") を呼び出すことによって、入力ファイルの内容を XML として読み取ることができます。
例
XML ファイルの内容を構造体としてインポートし、構造体から変数を作成し、その内容をクエリします。
ファイル music.xml の内容を表示します。
type music.xml<MusicalEnsemble>
<Ensemble>
<Music>Jazz</Music>
<BandName>Kool Katz</BandName>
<Instrumentation>
<Instrument type="wind">Trumpet
</Instrument>
<Instrument type="percussion">Piano
<pianotype>concert grand</pianotype>
</Instrument>
<Instrument type="percussion">Drums
<drumkit>Bass drum</drumkit>
<drumkit>Floor tom</drumkit>
<drumkit>Snare drum</drumkit>
<drumkit>Hi-hat</drumkit>
<drumkit>Ride cymbal</drumkit>
</Instrument>
<Instrument type="string">Bass
<basstype>upright</basstype>
</Instrument>
</Instrumentation>
</Ensemble>
<Musicians>
<Name role="trumpeter">Miles</Name>
<Name role="vocalist">Roger</Name>
<Name role="pianist">Diana</Name>
<Name role="drummer">George</Name>
<Name role="bassist">John</Name>
</Musicians>
</MusicalEnsemble>
music.xml を構造体として MATLAB® にインポートします。この構造体には、MusicalEnsemble という名前の 1 つの親ノードがあり、その親ノードは 2 つの兄弟ノード Ensemble と Musicians をもちます。
S = readstruct("music.xml")S = struct with fields:
Ensemble: [1×1 struct]
Musicians: [1×1 struct]
1 つ目の兄弟ノードから変数 band を作成します。band には 3 つのフィールドがあり、その 1 つは、Instrumentation という名前の構造体です。
band = S.Ensemble
band = struct with fields:
Music: "Jazz"
BandName: "Kool Katz"
Instrumentation: [1×1 struct]
band の Instrumentation をクエリし、その内容を表示します。
ins = band.Instrumentation
ins = struct with fields:
Instrument: [1×4 struct]
2 つ目の兄弟ノードから変数 musicians を作成します。musicians は、Name という名前の 1 つのフィールドをもち、その中に 5 つの構造体が含まれます。
musicians = S.Musicians
musicians = struct with fields:
Name: [1×5 struct]
テキスト ファイルの内容を構造体としてインポートします。
ファイル music.info の内容を表示します。
type music.info<MusicalEnsemble>
<Ensemble>
<Music>Jazz</Music>
<BandName>Kool Katz</BandName>
<Instrumentation>
<Instrument type="wind">Trumpet
</Instrument>
<Instrument type="percussion">Piano
<pianotype>concert grand</pianotype>
</Instrument>
<Instrument type="percussion">Drums
<drumkit>Bass drum</drumkit>
<drumkit>Floor tom</drumkit>
<drumkit>Snare drum</drumkit>
<drumkit>Hi-hat</drumkit>
<drumkit>Ride cymbal</drumkit>
</Instrument>
<Instrument type="string">Bass
<basstype>upright</basstype>
</Instrument>
</Instrumentation>
</Ensemble>
<Musicians>
<Name role="trumpeter">Miles</Name>
<Name role="vocalist">Roger</Name>
<Name role="pianist">Diana</Name>
<Name role="drummer">George</Name>
<Name role="bassist">John</Name>
</Musicians>
</MusicalEnsemble>
music.info を構造体として MATLAB にインポートします。名前と値の引数 FileType を "xml" として指定して、内容を XML ファイルとして読み取ります。
S = readstruct("music.info",FileType="xml")
S = struct with fields:
Ensemble: [1×1 struct]
Musicians: [1×1 struct]
R2023b 以降
JSON ファイルの内容を構造体としてインポートし、構造体から変数を作成し、その内容をクエリします。
ファイル music.json の内容を表示します。
type music.json{
"Ensemble": {
"Music": "jazz",
"BandName": "Kool Katz",
"Instrumentation": [
{
"Type": "wind",
"Instrument": "trumpet",
},
{
"Type": "percussion",
"Instrument": "piano",
"Pianotype": "concert grand",
},
{
"Type": "percussion",
"Instrument": "drums",
"Drumkit": [
"bass drum",
"floor tom",
"snare drum",
"hi-hat",
"ride cymbal"
],
},
{
"Type": "string",
"Instrument": "bass",
"Basstype": "upright"
}
]
},
"Musicians": [
{
"Role": "trumpeter",
"Name": "Miles"
},
{
"Role": "vocalist",
"Name": "Roger"
},
{
"Role": "pianist",
"Name": "Diana"
},
{
"Role": "drummer",
"Name": "George"
},
{
"Role": "bassist",
"Name": "John"
}
]
}
music.json を構造体として MATLAB にインポートします。この構造体には、Ensemble および Musicians という名前の 2 つの兄弟ノードが含まれています。
S = readstruct("music.json")S = struct with fields:
Ensemble: [1×1 struct]
Musicians: [1×5 struct]
1 つ目の兄弟ノードから変数 band を作成します。band には 3 つのフィールドがあり、その 1 つは、Instrumentation という名前の構造体配列です。
band = S.Ensemble
band = struct with fields:
Music: "jazz"
BandName: "Kool Katz"
Instrumentation: [1×4 struct]
band の Instrumentation をクエリし、その内容を表示します。
ins = band.Instrumentation
ins=1×4 struct array with fields:
Type
Instrument
Pianotype
Drumkit
Basstype
2 つ目の兄弟ノードから変数 musicians を作成します。
musicians = S.Musicians
musicians=1×5 struct array with fields:
Role
Name
一様に構造化されたデータを含まないファイルから構造体を作成し、その内容を表示します。
ある兄弟ノードに、他の兄弟ノードには存在しないフィールドがある場合、readstruct は、他のノードで見つからないフィールドに対して missing を返します。たとえば、ファイル music.json で、Instrumentation の 2 つ目のノードには、Pianotype という名前の空でないフィールドが含まれます。兄弟ノードは Pianotype に指定された値をもたないため、readstruct は、それらのノード下の Pianotype に対して missing を返します。
type music.json{
"Ensemble": {
"Music": "jazz",
"BandName": "Kool Katz",
"Instrumentation": [
{
"Type": "wind",
"Instrument": "trumpet",
},
{
"Type": "percussion",
"Instrument": "piano",
"Pianotype": "concert grand",
},
{
"Type": "percussion",
"Instrument": "drums",
"Drumkit": [
"bass drum",
"floor tom",
"snare drum",
"hi-hat",
"ride cymbal"
],
},
{
"Type": "string",
"Instrument": "bass",
"Basstype": "upright"
}
]
},
"Musicians": [
{
"Role": "trumpeter",
"Name": "Miles"
},
{
"Role": "vocalist",
"Name": "Roger"
},
{
"Role": "pianist",
"Name": "Diana"
},
{
"Role": "drummer",
"Name": "George"
},
{
"Role": "bassist",
"Name": "John"
}
]
}
music.json を構造体としてインポートします。
S = readstruct("music.json")S = struct with fields:
Ensemble: [1×1 struct]
Musicians: [1×5 struct]
S で Pianotype 構造体をクエリし、その内容を変数に代入します。
[ins1,ins2,ins3,ins4] = S.Ensemble.Instrumentation.Pianotype
ins1 = missing
<missing>
ins2 = "concert grand"
ins3 = missing
<missing>
ins4 = missing
<missing>
名前と値の引数 RegisteredNamespaces を使用して、入力ファイルの既存の名前空間 URL にカスタムの XML 名前空間接頭辞を登録します。
students.xml ファイルの 2 つ目の Street 要素ノードを構造体として読み取るには、名前と値の引数 StructSelector を "//Student[2]/Address/myPrefix:Street" として指定します。RegisteredNamespaces を ["myPrefix","https://www.mathworks.com"] として指定します。
S = readstruct("students.xml",RegisteredNamespaces=["myPrefix","https://www.mathworks.com"], ... StructSelector="//Student[2]/Address/myPrefix:Street")
S = struct with fields:
xmlnsAttribute: "https://www.mathworks.com"
Text: "4641 Pearl Street"
R2023b 以降
JSON 標準に厳格に準拠するが、解析時に末尾のコンマを許可して、JSON ファイルから構造体を作成します。
S = readstruct("music.json",ParsingMode="strict",AllowTrailingCommas=true)
S = struct with fields:
Ensemble: [1×1 struct]
Musicians: [1×5 struct]
入力引数
読み取るファイルの名前。string スカラーまたは文字ベクトルとして指定します。ファイル タイプは、ファイル拡張子または名前と値の引数 FileType によって判別されます。拡張子が .xml または .json のファイルはそれぞれ XML または JSON (R2023b 以降) ファイルとして解釈されます。一方、その他のファイル拡張子の場合は、名前と値の引数 FileType を指定する必要があります。拡張子が .zip、.gz、または .tar のファイルは圧縮ファイルまたはアーカイブ ファイルとして解釈されます。
圧縮ファイル形式はファイルとして読み取られます。アーカイブ ファイル形式はフォルダーとして扱われます。たとえば、関数は mydatafiles.zip をフォルダーとして解釈するため、その中にある mydatafiles.zip/file1.xlsx などのファイルを指定しなければなりません。.gz 拡張子で終わるファイルの場合、関数は .gz の前にある拡張子を使用してファイル形式を判別します。たとえば、mydata.csv.gz は CSV ファイルとして読み取られます。 (R2025a 以降)
ファイルの場所に応じて、filename は次の形式のいずれかをとります。
場所 | 形式 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| 現在のフォルダー、または MATLAB® パス上のフォルダー | ファイル名を 例: 例: | ||||||||
フォルダー内のファイル | ファイルが現在のフォルダーまたは MATLAB パス上のフォルダーにない場合は、 例: 例: 例: 例: | ||||||||
| インターネット URL | ファイルをインターネットの Uniform Resource Locator (URL) として指定する場合、 例: 例: | ||||||||
リモートの場所 | リモートの場所に保存されたファイルの場合、
リモートの場所に基づいて、
詳細については、リモート データの操作を参照してください。 例: 例: |
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: readstruct("myfile.xml",DateLocale="en_US") は日付に en-US ロケールを使用して myfile.xml からデータをインポートします。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。
例: readstruct("myfile.xml","DateLocale","en_US") は日付に en-US ロケールを使用して myfile.xml からデータをインポートします。
ファイル情報
ファイルのタイプ。次の値のいずれかとして指定します。
"xml"—filenameで指定されているファイル拡張子に関係なく、入力ファイルの内容を XML として読み取ります。"json"—filenameで指定されているファイル拡張子に関係なく、入力ファイルの内容を JSON として読み取ります。 (R2023b 以降)
.xml でも .json でもないファイル拡張子を filename で指定した場合、FileType を "xml" または "json" として指定して、入力ファイルの内容をそれぞれ XML または JSON として読み取ることができます。
例: FileType="xml"
日付を読み取るロケール。形式 の string スカラーまたは文字ベクトルとして指定します。xx_YY
xxは言語を表す小文字 2 文字の ISO 639-1 コードYYは国を表す大文字の ISO 3166-1 alpha-2 コード
次の表に一般的なロケールの値を示します。
| ロケール | 言語 | 国 |
|---|---|---|
"de_DE" | ドイツ語 | ドイツ |
"en_GB" | 英語 | 英国 |
"en_US" | 英語 | 米国 |
"es_ES" | スペイン語 | スペイン |
"fr_FR" | フランス語 | フランス |
"it_IT" | イタリア語 | イタリア |
"ja_JP" | 日本語 | 日本 |
"ko_KR" | 韓国語 | 韓国 |
"nl_NL" | オランダ語 | オランダ |
"zh_CN" | 簡体字中国語 | 中国 |
例: DateLocale="ja_JP"
開始要素の名前。string スカラーまたは文字ベクトルとして指定します。読み取り始める位置を決定するために、readstruct は、StructNodeName で指定した値に一致する名前をもつ最初のノードをファイル内で検索します。readstruct は入力ファイルの内容をそのノードから読み取り始めます。StructNodeName を指定しなかった場合、readstruct は内容の読み取りをファイルのルートから開始します。
例: StructNodeName="RootName"
例: StructNodeName="Instrumentation"
開始 XML パスまたは JSON ポインター。string スカラーまたは文字ベクトルとして指定します。readstruct は、入力ファイルの内容の読み取りを、指定した XML パスまたは JSON ポインターの要素から開始します。
XML ファイルの場合、StructSelector の値は、有効な XPath Version 1.0 の式でなければなりません。XML パスは以下の構文を使用して指定できます。
| XML 選択操作 | 構文 | 例 |
|---|---|---|
| 文書内の位置に関係なく、名前でノードを選択する。 | 名前の前にスラッシュを 2 つ (//) 付ける。 | S = readstruct("music.xml",StructSelector="//Ensemble") |
| 一連のノードから特定のノードをインデックスで選択する。 | ノードのインデックスを大かっこ ([]) で囲んで指定する。 | S = readstruct("music.xml", ... StructSelector= ... "//Ensemble/Instrumentation/Instrument[3]") |
| 演算の優先順位を指定する。 | 最初に評価する式を小かっこで囲む。 | S = readstruct("students.xml", ... StructSelector="//Student/Name[4]") |
S = readstruct("students.xml", ... StructSelector="(//Student/Name)[4]") |
JSON ポインターは以下の構文を使用して指定できます。
| JSON 選択操作 | 構文 | 例 |
|---|---|---|
| 名前で JSON オブジェクト キーを選択する。 | 名前の前にスラッシュを 1 つ (/) 付ける。 | S = readstruct("music.json",StructSelector="/Musicians") |
| JSON 配列要素をインデックスで選択する。 | スラッシュ 1 つ (/) の後にノードのインデックスを指定する。このインデックスは 0 ベース。 | S = readstruct("music.json", ... StructSelector="/Musicians/4") |
HTTP または HTTPS 要求オプション。weboptions オブジェクトとして指定します。weboptions オブジェクトは、指定した filename がプロトコル タイプ "http://" または "https://" を含むインターネット URL である場合にデータをインポートする方式を決定します。
XML の属性
属性のインポート。数値または logical 1 (true) または 0 (false) として指定します。値を false に指定すると、readstruct は入力ファイル内の XML 属性を出力構造体のフィールドとしてインポートしません。
例: ImportAttributes=false
属性接尾辞。string スカラーまたは文字ベクトルとして指定します。readstruct は、この接尾辞を入力 XML ファイルに含まれる属性に対応する出力構造体のすべてのフィールド名に付加します。AttributeSuffix を指定しない場合、readstruct は既定で接尾辞 "Attribute" を入力 XML ファイルに含まれる属性に対応するすべてのフィールド名に付加します。
例: AttributeSuffix="_att"
登録済みの XML 名前空間接頭辞のセット。接頭辞の string 行列として指定します。読み取り関数は、XML ファイルの XPath 式を評価する際にこれらの接頭辞を使用します。名前空間接頭辞とそれに関連付けられた URL を N 行 2 列の string 行列として指定します。ここで、N は名前空間接頭辞と URL のペアの数です。RegisteredNamespaces は、readstruct の StructSelector や readtable と readtimetable の VariableSelectors など、セレクターの名前と値の引数で指定された XPath 式も評価する場合に使用できます。
既定では、読み取り関数は XPath の評価に使用する名前空間接頭辞を自動的に検出して登録しますが、名前と値の引数 RegisteredNamespaces を使用して新しい名前空間接頭辞を登録することもできます。新しい名前空間接頭辞の登録は、名前空間 URL がある XML ノードについて、XML ファイルで名前空間接頭辞が宣言されていない場合などに便利です。
たとえば、名前空間接頭辞が含まれていない example.xml という名前の XML ファイルの XPath 式を評価するとします。RegisteredNamespaces を ["myprefix","https://www.mathworks.com"] と指定して、接頭辞 "myprefix" を URL https://www.mathworks.com に割り当てます。
S = readstruct("example.xml",StructSelector="/myprefix:Data", ...
RegisteredNamespaces=["myprefix","https://www.mathworks.com"])例: RegisteredNamespaces=["myprefix","https://www.mathworks.com"]
JSON 標準
R2023b 以降
解析時に JSON 標準にどれだけ厳格に準拠するか。次の値のいずれかとして指定します。
"lenient"(既定の設定) –AllowComments、AllowInfAndNaN、およびAllowTrailingCommasの値がtrueに設定されます。"strict"–AllowComments、AllowInfAndNaN、およびAllowTrailingCommasの値がfalseに設定されます。
R2023b 以降
入力ファイルでコメントを許可するかどうか。次のいずれかの値として指定します。
数値または logical
1(true) (既定の設定) – インポート時にコメントはエラーになりません。ファイル内のコメントはデータとみなされず、MATLAB に読み取られません。コメントは、単一行のコメントの場合は「//」で開始できます。複数行のコメントの場合は、「/*」で開始し、「*/」で終了することができます。数値または logical
0(false) – インポート時にコメントはエラーになります。
R2023b 以降
入力ファイル内の Inf および NaN リテラルを読み取るかどうか。次のいずれかの値として指定します。
数値または logical
1(true) (既定の設定) –InfおよびNaNリテラル (Infinity、-Inf、-Infinityを含む) は MATLAB に読み取られます。数値または logical
0(false) – インポート時にInfおよびNaNリテラルはエラーになります。
R2023b 以降
入力ファイル内の末尾のコンマを読み取るかどうか。次のいずれかの値として指定します。
数値または logical
1(true) (既定の設定) – インポート時に JSON 配列または JSON オブジェクトの後の末尾のコンマはエラーになりません。数値または logical
0(false) – インポート時に末尾のコンマはエラーになります。
出力引数
拡張機能
使用上の注意および制限:
readstructは、XML ファイルではスレッドベースのワークフローのみをサポートしています。
バージョン履歴
R2020b で導入MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)