WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablennamen für Variablenzuweisung aus Text-Datei lesen

 

DaKe
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2019, 00:13     Titel: Variablennamen für Variablenzuweisung aus Text-Datei lesen
  Antworten mit Zitat      
Hallo zusammen,

habe folgendes vor, und denke dass man das aufjedenfall mit MATLAB lösen kann, jedoch habe ich die notwendigen Befehle nicht...

Die Text-Datei soll wie folgt aufgebaut sein:

datapoints1 = GGA_x;
datapoints2 = GGA_y:
.
.
.

Und zwar sind die Namen Var1, Var2 die Variablennamen in meinem MATLAB-Skript, mit denen ich arbeite. Nun habe ich mehrere Dateien, in denen MATLAB-Strukturen sind, jedoch der Variablenname in der struct mit den Daten immer verschieden ist und eben in der Text-Datei hinterlegt werden soll ( in dem Fall GGA_x und GGA_y).


Code:
% Bisher habe ich das so gelöst
for m=1:15
for i=1:length(datapoints)
datapoints(:,1) = data(m).GGA_x(i);
datapoints(:,2) = data(m).GGA_y(i);
end
end


Die Variable data ist in meinem Fall eine 1x15 struct wo ich eben mit data(...).GGA_x(...) auf die jeweilige struct und auf den jeweiligen Eintrag in GGA-X oder GGA_y zugreifen kann.
Jedoch möchte das ganze eben jetzt nicht fix in der for-Schleife schreiben, sondern eben die Zuweisung data(m).GGA_x(i) aus meiner Text-Datei entnehmen, und somit die Daten aus der struct in meine Variable datapoints schreiben, welche im MATLAB skript auch gleich bleibt. Da zum Beispiel in einer anderen Datei, die Werte nicht in GGA_x und GGA_y stehen, sondern bspw. in GGS_x und GGS_y.

Ich hoffe ich habe mein Anliegen einigermaßen verständlich geschildert und ich würde mich sehr freuen, wenn jemand einen Ansatz oder sogar einen konkreten Befehl hat.

Viele Grüße
Da Ke
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.01.2019, 10:18     Titel:
  Antworten mit Zitat      
Hallo,

fieldnames könnte helfen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
DaKe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2019, 18:14     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die Rückmeldung...

Ich habe jetzt mal versucht das ganze mal als code verständlich zu machen... Jedoch verwende ich hier readtable, da ich nicht ganz verstanden habe wie ich mit fieldnames eine Variablenzuweisung machen kann.

my_struct.mat ist eine 1x15 struct mit 191 fields wobei die relevanten Daten vom typ double sind

Datenmatrix.txt ist folgendermaßen aufgebaut:
matlab variable - data variable
aa ; sigGGA_Latitude
bb ; sigGGA_Longitude


Code:

clc
clear all

filename= fullfile('Datenmatrix.txt');
data = load('my_struct.mat);
T= readtable(filename, 'Delimiter', ';', 'ReadRowNames', true);

variable1=T{'aa', :};

for i=1:length(data.variable1)
    datapoints1(i) = data.variable1(i);
end


Nun möchte ich sozusagen mit dem befehl data.variable1(i) den variablennamen aus der text-Datei entnehmen (bspw. sigGGA_Latitude) und die Daten aus der struct mit der variable sigGGA_Latitude entnehmen.

Hast du hier einen konkreten Befehl ? Wäre echt super...

Grüße
Daniel Kern
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.01.2019, 23:57     Titel:
  Antworten mit Zitat      
Hallo,

ich rate mal:
Code:
datapoints1(i) = data.(variable1{i});


Ansonsten muss ich sagen, dass ich nicht verstehe, was "die Daten aus der struct mit der variable sigGGA_Latitude entnehmen." bedeuten soll.
Ein struct ist eine besondere Art Variable, und ein struct enthält Felder. Das wirkt mir hier etwas durcheinandergewürfelt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
DaKe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2019, 00:07     Titel:
  Antworten mit Zitat      
Hi Harald,

vermutlich habe ich mein problem zu kompliziert geschildert... ich beschreibe es nochmal aber vereinfacht, da ich vermutlich nur ein paar wenige befehle benötige.

Ich habe eine Text-Datei in der eine Variablenzuweisung definiert ist und zwar in diesem Format:

var1 ; a
var2 ; b
var3 ; c

Nun möchte ich in MATLAB diese variablen definieren und zwar aus dem oben gezeigten text-file, sodass schließlich var1 = a ist und var2 = b ist. Hierzu gilt zu sagen, dass die variablen a, b und c vektoren mit 1000 werten sind und in einer 1x15 struct hinterlegt sind. Das ganze sollte auch funktionieren, wenn man die txt datei bspw. in dieser form abändert:

var1 ; d
var2 ; e
var3 ; f

In diesem Fall sollte in var1 dann nicht mehr die Daten aus data.a zugewiesen werden (data ist in dem falle meine struct die im workspace vorhanden ist), sondern aus dem vektor d (vektor d also data.d befindet sich ebenfalls in der struct), wo ich über data(i).a(j) oder eben data(i).d(j) auf jedes einzelne element von a bzw. d zugreifen könnte (mit i sage ich sozusagen welche struct und über j welchen eintrag des vektors).

Vielleicht ist es nun ein wenig klarer Smile

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.01.2019, 01:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
sodass schließlich var1 = a ist und var2 = b ist

Dynamische Variablennamen sind mit eval zwar möglich, aber keine gute Idee, weil sehr schwer zu debuggen, und du musst dann auch im Programmverlauf immer wieder eval verwenden.
Wenn, dann solltest du das schon in ein struct packen bzw. in dem struct lassen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
DaKe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2019, 02:04     Titel:
  Antworten mit Zitat      
also damit bin ich fast am ziel... jedoch gelingt es mir nicht in meinem fieldname nach einem string zu suchen, ich kann lediglich nach dem bestimmten Zeileneintrag im fieldname suchen

Code:
filename= fullfile('C:MATLAB\data.txt');
data = load('my_struct.mat');
T= readtable(filename, 'Delimiter', ';', 'ReadRowNames', true);
new_variable1=T{'var1', :};     % gives a in 1x1 cell  
new_variable2=T{'var2', :};     % gives b in 1x1 cell
new_var2=T{1,1};                % same result as above
fn = fieldname(my_struct);
var(:,1) = my_struct.(fn{???});    % search for a string in fn ?


Habe es auch mit dem Befehl versucht, jedoch gibt er hier ein cell array zurück, welcher so lange ist, wie der gegebene string zeichen hat.. bei 'a' also 1x1 cell aber in dem falle für eine variable wie 'zeit' gibt er ein 1x4 cell weil 'Zeit' 4 Zeichen hat...

Code:
z = char(variable1);
var(:,1 = fn(z);

jetzt muss ich es nur noch schaffen in meinem field fn nach einem bestimmen string zu suchen, welchen ich aus meinem txt-file entnehmen kann.

hmm... any ideas ? ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.