Main Content

writestruct

構造体配列をファイルに書き込む

R2020b 以降

    説明

    writestruct(S,filename) は、構造体の内容を filename で指定された名前と拡張子のファイルに書き込みます。たとえば、関数 writestruct は、filename でファイル拡張子として .xml が指定された場合に、入力構造体を XML ファイルに書き込みます。

    writestruct(S,filename,Name=Value) は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、filename で指定されたファイル拡張子にかかわらず、writestruct(filename,FileType="xml") を呼び出して、入力構造体の内容を XML ファイルとしてエクスポートできます。

    すべて折りたたむ

    XML 構造を含むテキスト ファイルから構造体を作成し、それを XML ファイルに書き込みます。

    ファイル music.txt の内容を表示します。

    type music.txt
    <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.txt を構造体としてインポートします。名前と値の引数 FileType を "xml" として指定して、内容を XML ファイルとして読み取ります。

    S = readstruct("music.txt","FileType","xml")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    構造体を XML ファイルに書き込みます。XML ファイルの内容を表示します。

    writestruct(S,"band.xml")
    type band.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <struct>
        <Ensemble>
            <Music>Jazz</Music>
            <BandName>Kool Katz</BandName>
            <Instrumentation>
                <Instrument type="wind">
                    <Text>Trumpet</Text>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Piano</Text>
                    <pianotype>concert grand</pianotype>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Drums</Text>
                    <drumkit>Bass drum</drumkit>
                    <drumkit>Floor tom</drumkit>
                    <drumkit>Snare drum</drumkit>
                    <drumkit>Hi-hat</drumkit>
                    <drumkit>Ride cymbal</drumkit>
                </Instrument>
                <Instrument type="string">
                    <Text>Bass</Text>
                    <basstype>upright</basstype>
                </Instrument>
            </Instrumentation>
        </Ensemble>
        <Musicians>
            <Name role="trumpeter">
                <Text>Miles</Text>
            </Name>
            <Name role="vocalist">
                <Text>Roger</Text>
            </Name>
            <Name role="pianist">
                <Text>Diana</Text>
            </Name>
            <Name role="drummer">
                <Text>George</Text>
            </Name>
            <Name role="bassist">
                <Text>John</Text>
            </Name>
        </Musicians>
    </struct>
    

    music.xml ファイルを構造体としてインポートします。

    S = readstruct("music.xml")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    構造体を XML ファイルに書き込みます。ルート ノードに JazzBand という名前を付けます。XML ファイルの内容を表示します。

    writestruct(S,"band.xml","StructNodeName","JazzBand")
    type band.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <JazzBand>
        <Ensemble>
            <Music>Jazz</Music>
            <BandName>Kool Katz</BandName>
            <Instrumentation>
                <Instrument type="wind">
                    <Text>Trumpet</Text>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Piano</Text>
                    <pianotype>concert grand</pianotype>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Drums</Text>
                    <drumkit>Bass drum</drumkit>
                    <drumkit>Floor tom</drumkit>
                    <drumkit>Snare drum</drumkit>
                    <drumkit>Hi-hat</drumkit>
                    <drumkit>Ride cymbal</drumkit>
                </Instrument>
                <Instrument type="string">
                    <Text>Bass</Text>
                    <basstype>upright</basstype>
                </Instrument>
            </Instrumentation>
        </Ensemble>
        <Musicians>
            <Name role="trumpeter">
                <Text>Miles</Text>
            </Name>
            <Name role="vocalist">
                <Text>Roger</Text>
            </Name>
            <Name role="pianist">
                <Text>Diana</Text>
            </Name>
            <Name role="drummer">
                <Text>George</Text>
            </Name>
            <Name role="bassist">
                <Text>John</Text>
            </Name>
        </Musicians>
    </JazzBand>
    

    出力 XML ファイルで属性として書き込む入力構造体のフィールド名を指定します。

    music.xml ファイルを構造体としてインポートします。入力 XML ファイルの属性に対応する出力構造体のフィールド名に接尾辞 "_att" を追加します。

    S = readstruct("music.xml","AttributeSuffix","_att")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    関連する属性をもつ出力構造体のすべての要素には接尾辞 "_att" が属性名に追加されます。

    フィールド Musicians をクエリして内容を表示します。Musicians は 5 つの構造体を含む構造体で、そのそれぞれの構造体には、role という関連する属性をもつ Name というフィールドが含まれています。

    contents = S.Musicians
    contents = struct with fields:
        Name: [1x5 struct]
    
    
    RolesNames = S.Musicians.Name
    RolesNames=1×5 struct array with fields:
        role_att
        Text
    
    

    構造体 Sband.xml という名前の XML ファイルに書き込み、その内容を表示します。接尾辞 "_att" がファイルの属性名に追加されます。

    writestruct(S,"band.xml")
    type band.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <struct>
        <Ensemble>
            <Music>Jazz</Music>
            <BandName>Kool Katz</BandName>
            <Instrumentation>
                <Instrument>
                    <type_att>wind</type_att>
                    <Text>Trumpet</Text>
                </Instrument>
                <Instrument>
                    <type_att>percussion</type_att>
                    <Text>Piano</Text>
                    <pianotype>concert grand</pianotype>
                </Instrument>
                <Instrument>
                    <type_att>percussion</type_att>
                    <Text>Drums</Text>
                    <drumkit>Bass drum</drumkit>
                    <drumkit>Floor tom</drumkit>
                    <drumkit>Snare drum</drumkit>
                    <drumkit>Hi-hat</drumkit>
                    <drumkit>Ride cymbal</drumkit>
                </Instrument>
                <Instrument>
                    <type_att>string</type_att>
                    <Text>Bass</Text>
                    <basstype>upright</basstype>
                </Instrument>
            </Instrumentation>
        </Ensemble>
        <Musicians>
            <Name>
                <role_att>trumpeter</role_att>
                <Text>Miles</Text>
            </Name>
            <Name>
                <role_att>vocalist</role_att>
                <Text>Roger</Text>
            </Name>
            <Name>
                <role_att>pianist</role_att>
                <Text>Diana</Text>
            </Name>
            <Name>
                <role_att>drummer</role_att>
                <Text>George</Text>
            </Name>
            <Name>
                <role_att>bassist</role_att>
                <Text>John</Text>
            </Name>
        </Musicians>
    </struct>
    

    構造体 S を XML ファイルに再度書き込みます。今回は名前と値の引数 AttributeSuffix"_att" として指定して、属性として書き込む入力構造体のフィールド名を示します。band.xml の内容を表示します。band.xml の属性には接尾辞 "_att" はありません。

    writestruct(S,"band.xml","AttributeSuffix","_att")
    type band.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <struct>
        <Ensemble>
            <Music>Jazz</Music>
            <BandName>Kool Katz</BandName>
            <Instrumentation>
                <Instrument type="wind">
                    <Text>Trumpet</Text>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Piano</Text>
                    <pianotype>concert grand</pianotype>
                </Instrument>
                <Instrument type="percussion">
                    <Text>Drums</Text>
                    <drumkit>Bass drum</drumkit>
                    <drumkit>Floor tom</drumkit>
                    <drumkit>Snare drum</drumkit>
                    <drumkit>Hi-hat</drumkit>
                    <drumkit>Ride cymbal</drumkit>
                </Instrument>
                <Instrument type="string">
                    <Text>Bass</Text>
                    <basstype>upright</basstype>
                </Instrument>
            </Instrumentation>
        </Ensemble>
        <Musicians>
            <Name role="trumpeter">
                <Text>Miles</Text>
            </Name>
            <Name role="vocalist">
                <Text>Roger</Text>
            </Name>
            <Name role="pianist">
                <Text>Diana</Text>
            </Name>
            <Name role="drummer">
                <Text>George</Text>
            </Name>
            <Name role="bassist">
                <Text>John</Text>
            </Name>
        </Musicians>
    </struct>
    

    ファイル musicians.txt の内容を表示します。

    type musicians.txt
    {
        "Orchestra": {
            "Music": "classical",
            "Instruments": [
                {
                    "Section": "string",
                    "Musicians": 5
                },
                {
                    "Section": "brass",
                    "Musicians": 5
                },
                {
                    "Section": "woodwind",
                    "Musicians": NaN
                }
            ]
        },
        "Band": [
            {
                "Section": "guitar",
                "Musicians": 2
            },
            {
                "Section": "bass",
                "Musicians": NaN
            },
            {
                "Section": "drums",
                "Musicians": 1
            },
        ]
    }
    

    musicians.txt から構造体を作成します。ファイルを JSON ファイルとして解析します。

    S = readstruct("musicians.txt",FileType="json");

    構造体 Smusicians.json に書き込みます。すべての NaN 値を null 値に置き換えます。

    writestruct(S,"musicians.json",PreserveInfAndNaN=false)
    type musicians.json
    {
        "Orchestra": {
            "Music": "classical",
            "Instruments": [
                {
                    "Section": "string",
                    "Musicians": 5.0
                },
                {
                    "Section": "brass",
                    "Musicians": 5.0
                },
                {
                    "Section": "woodwind",
                    "Musicians": null
                }
            ]
        },
        "Band": [
            {
                "Section": "guitar",
                "Musicians": 2.0
            },
            {
                "Section": "bass",
                "Musicians": null
            },
            {
                "Section": "drums",
                "Musicians": 1.0
            }
        ]
    }
    

    入力引数

    すべて折りたたむ

    入力構造体。MATLAB 構造体として指定します。構造体は、フィールドと呼ばれるデータ コンテナーを使って、関連するデータをグループとしてまとめるデータ型です。各フィールドには任意のデータ型を含めることができます。structName.fieldName の形式のドット表記を使用して、構造体内のデータにアクセスします。構造体の詳細については、struct を参照してください。

    XML ファイルを作成する際に、入力構造体のフィールドに欠損値または NaN が含まれている場合、writestruct はフィールドの内容を空の string として書き込みます。JSON ファイルを作成する際に、writestruct は欠損値を null 値として書き込み、NaN 値を、名前と値の引数 PreserveInfAndNan に応じて null 値または NaN 値として書き込みます。

    書き込むファイルの名前。string スカラーまたは文字ベクトルとして指定します。filename が存在しない場合、書き込み関数がファイルを作成します。filename が既存のファイルの名前である場合、書き込み関数はそのファイルを上書きします。

    書き込み先の場所によって、filename は次のいずれかの形式にできます。

    場所

    形式

    現在のフォルダー

    現在のフォルダーに書き込むには、ファイルの名前を filename に指定します。

    例: "myFile.xml"

    例: "myFile.json"

    その他のフォルダー

    現在のフォルダーではないフォルダーに書き込むには、絶対パス名または相対パス名を filename に指定します。

    例: "C:\myFolder\myFile.xml"

    例: "myFolder\myFile.xml"

    例: "C:\myFolder\myFile.json"

    例: "myFolder\myFile.json"

    リモートの場所

    リモートの場所に書き込むには、次の形式の Uniform Resource Locator (URL) を指定します。

    scheme_name://path_to_file/my_file.ext

    リモートの場所に基づいて、scheme_name には次の表の値のいずれかを指定できます。

    リモートの場所scheme_name
    Amazon S3™s3
    Windows Azure® Blob Storagewasb, wasbs
    HDFS™hdfs

    詳細については、リモート データの操作を参照してください。

    例: "s3://bucketname/path_to_file/myFile.xml"

    例: "s3://bucketname/path_to_file/myFile.json"

    名前と値の引数

    引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

    例: writestruct(S,"myfile.xml",StructNodeName="RootName") は出力 XML ファイルのルート ノードに使用する名前を指定します。

    R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

    例: writestruct(S,"myfile.xml","StructNodeName","RootName") は出力 XML ファイルのルート ノードに使用する名前を指定します。

    ファイルのタイプ。次の値のいずれかとして指定します。

    • "xml"filename で指定されるファイル拡張子にかかわらず、構造体の内容を XML ファイルとしてエクスポートします。

    • "json"filename で指定されるファイル拡張子にかかわらず、構造体の内容を JSON ファイルとしてエクスポートします。 (R2023b 以降)

    .xml でも .json でもないファイル拡張子を filename で指定した場合、FileType"xml" または "json" として指定して、入力構造体の内容をそれぞれ XML または JSON として書き込むことができます。

    例: FileType="xml"

    R2023b 以降

    出力ファイルでテキストをインデントするかどうか。数値または logical 1 (true) または 0 (false) として指定します。値を true に指定すると、writestruct は 4 つのスペースから成るインデントを追加して XML または JSON テキストを書き込みます。

    出力 XML ファイルのルート ノード名。string スカラーまたは文字ベクトルとして指定します。StructNodeName を指定しない場合、ルート ノードの既定の名前は "struct" です。

    例: StructNodeName="RootName"

    XML 属性接尾辞。string スカラーまたは文字ベクトルとして指定します。この接尾辞は、出力 XML ファイルで属性として書き込む入力構造体のフィールド名を示します。

    AttributeSuffix の値が入力構造体の属性名の接尾辞に一致している場合、その接尾辞は出力 XML ファイルで属性名から取り除かれます。たとえば、AttributeSuffix"_att" として指定した場合、MyField_att という名前の入力構造体のフィールドは XML ファイルで MyField という名前の属性として書き込まれます。

    AttributeSuffix を指定しなかった場合、writestruct は既定で出力 XML ファイルで接尾辞 "Attribute" を付けてフィールドを属性として書き込みます。

    例: AttributeSuffix="_att"

    R2023b 以降

    出力 JSON ファイルでの Inf 値および NaN 値の保持。数値または logical 1 (true) または 0 (false) として指定します。すべての Inf 値および NaN 値を JSON null 値として書き込む場合は、この引数を false として指定します。

    例: PreserveInfAndNaN=false

    バージョン履歴

    R2020b で導入

    すべて展開する