Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Variablenzuweisung aus Text-Datei
Autor
Beruf Variablenzuweisung aus Text-Datei
dake94
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 21.01.2019
Mitteilungen: 1
  Themenstart: 2019-01-21

Hallo, folgendes möchte ich in MATLAB realisieren: 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. Das ganze sollte auch funktionieren, wenn man die text 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 a zugewiesen werden, sondern aus dem vektor d, der sich übrigens in einer großen struct befindet, 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 welche struct und über j welche eintrag des vektors). Ich dachte an readtable oder fieldnames, jedoch kam ich noch zu keinem sinnvollen ergebnis. Danke im Voraus


   Profil
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen.
walderich
Senior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 03.05.2006
Mitteilungen: 1996
Wohnort: Bad Dürrheim, Deutschland
  Beitrag No.1, eingetragen 2019-01-21

Hi dake94, herzlich willkommen auf dem Matheplaneten! Ich gehe mal davon aus, dass die Variable a, b, c, ... in deinem Workspace liegen? Schreibst du dann dazu ein Skript, dass die Textdatei einliest? Ich würde hier so vorgehen: 1. Datei öffnen und zeilenweise durchlaufen 2. Jede Zeile auf Gültigkeit prüfen (also, dass das Format passt usw.) 3. Die Variablen in ein Cell-Array speichern. Ich denke ein Cell-Array wäre die richtige Datenstruktur für das was du machen möchtest. Im ersten Schritt würde ich nur mal die Strings dort reinschreiben. So dass das finale Array dann so aussieht: \sourceon MATLAB vars = { 'var1' 'a' 'var2' 'b' 'var3' 'c' }; \sourceoff Nachdem du dieses Cell-Array aufgebaut hast, kannst du nochmal zeilenweise durchlaufen, die Variablen aus dem Workspace ermitteln und zusätzlich in das Cell-Array speichern (einfach als 3. Spalte). Ich würde davon abraten dynamisch Variablen anzulegen. Wenn dann Variablennamen mit deinen lokalen Variablen kollidieren, wirst du Schwierigkeiten haben herauszufinden, was da passiert ist. Wenn du dann einen Variablenwert brauchst, kannst du einfach das Cell-Array durchsuchen. Beispiel: \sourceon MATLAB vars = { 'var1' 'a' [2 4 8] 'var2' 'b' [9 0 4 NaN -1] 'var3' 'c' -9.2 }; % Eine Variable aus dem Cell-Array auslesen vars{strcmp(vars(:, 1), 'var3'), 3} \sourceoff Mit der letzten Zeile kannst du dann einzelne Werte aus dem Cell-Array ermitteln. Da passiert folgendes: 1. "vars(:, 1)" gibt die erste Spalte des Arrays zurück (mit den Variablennamen: {'var1'; 'var2'; 'var3'}) 2. "strcmp(..., 'var3')" Vergleicht die erste Spalte mit dem Variablennamen "var3". Dabei wird ein logisches Array zurückgegeben. Im Beispiel ist das: [false; false; true]. 3. "vars{..., 3}" nimmt das Array aus 2. und gibt die dritte Zeile (in der "true" steht) und die 3. Spalte zurück. Damit solltest du schließlich "-9.2" erhalten. Soweit mal die Theorie. Ich habe das nicht ausprobiert, denke aber, dass es so gehen sollte. Falls du noch weitere Infos oder Ansätze brauchst, einfach nochmal nachhaken. Viele Grüße, Sebastian


   Profil
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11650
Wohnort: Wien
  Beitrag No.2, eingetragen 2019-01-21

Hallo dake94, herzlich willkommen auf dem Matheplaneten! Woher kommt die Textdatei? Kannst Du das Format ändern? Servus, Roland [Die Antwort wurde vor Beitrag No.1 begonnen.]


   Profil
majoka
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 25.02.2014
Mitteilungen: 814
  Beitrag No.3, eingetragen 2019-01-23

Falls die Testdaten das folgende Format haben: \sourceon Txt var1 ; 100 101 102 var2 ; 200 201 202 var3 ; 300 301 303 \sourceoff dann kann man die einzelnen Zeilen einlesen, entsprechend der Matlab-Syntax umformatieren und dann in ein neues File schreiben \sourceon Matlab fid_r = fopen('testdaten.txt','r'); fid_w = fopen('testdaten.m','w'); while 1 line = fgetl(fid_r); % lese einzelne Zeile if ischar(line) split = strsplit(line,';'); fprintf(fid_w, [split{1}, '= [', (split{2}),'];\n']); % Schreibe Zeile in m-File end if line == -1 break; end end testdaten % lade Variablen in Workspace \sourceoff


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]