1

データベースからのデータを格納するための構造を作成したいと思います。

関数を作成しました

function result = LoadDataFromDB(query, columnNames)

ここで、列名は列名のリストを表します。たとえば、{'id', 'year', 'name'...}

次のクエリを実行した後

ps=conn.prepareStatement(sql);
rs=ps.executeQuery();

構造体を埋めたいのですが、構造体のフィールドに動的にアクセスする方法がわかりません。

構造を作成して埋めるコードは次のとおりです。

varnamelist = genvarname(columnNames);

result = cell2struct(cell(size(varnamelist(:))), varnamelist(:));
while rs.next()
    count=count+1;
    for i = 1 : length(columnNames)
        fieldname = columnNames(i);
        value = char(rs.getString(i));
          %result(count).columnNames(i)=char(rs.getString(i));
          result(count).(fieldname) = value;
    end
end

一番の問題はライン

result(count).(fieldname) = value;

以下に問題を説明するために、コンソール出力からのコピーを示します。

K>> result(1)

ans = 

    a: []
    b: []
    c: []

K>> result(1).('a')

ans =

     []

K>> fieldname

fieldname = 

    'a'

上記の出力から結論づけると、コマンド result(1).(fieldname) はフィールド 'a' にアクセスする必要がありますが、試してみると、次のエラーが返されます。

K>> result(1).(fieldname)
??? Argument to dynamic structure reference must evaluate to a valid field name.

構造を動的に埋める方法を知っている人はいますか?

4

1 に答える 1

1

はい、動的フィールド参照があります。たとえば、ここで詳細を見つけることができます。

動的参照を使用して、次のように構造体のフィールドを割り当てたり参照したりできます。

fieldName = 'some_field';
your_struct.(fieldName) = fieldValue

したがって、あなたの場合、それは内側のループ本体を次のように変更することを意味します

fieldname = columnNames{i};
value = rs.getString{i};
result(count).(fieldname) = value;
于 2012-08-31T11:32:57.840 に答える