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

Einlesen eines Vektors mit Klammern und exp-Termen

 

Nichtnocheiner
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2016, 21:09     Titel: Einlesen eines Vektors mit Klammern und exp-Termen
  Antworten mit Zitat      
Hallo!

Im Zuge einer Arbeit muss ich Daten aus größeren Textdateien herauslesen. Ganz konkret müsste ich mehrere Vektoren mit exponential-Termen auslesen und weiterverarbeiten, das alles in Matlab R2015b.

Die Rohdatei sieht folgendermaßen aus:

Code:

(-2.4205699e-07 -1.9279165e-06 9.9009843e-06)
(9.2551457e-07 -1.0314658e-06 1.929474e-05)
(3.1204986e-06 -3.3613111e-06 1.2522833e-05)
(-2.9173623e-06 -2.2982244e-06 1.1167152e-05)
...
 


Es sind insgesamt 5504 Vektoren die auslesen möchte.

Mein Ziel es, 3 Spaltenvektoren mit den jeweils ersten, zweiten und dritten Werten der ursprünglichen Vektoren zu erhalten, d.h drei (5504 x 1) Vektoren. Leider stecke ich schon beim einlesen der Vektoren fest.

Mein bisheriger Versuch sieht so aus:

Code:

fileID = fopen('phiSolid.txt');

face_Centers = textscan(fileID, 'ExpChars (%s %s %s)' ,5504, 'headerLines', 62645);

 


Im Command Window erscheint:

Code:

Error using textscan
Unknown parameter '(%s %s %s)'.
 


Wenn ich nun die " '(%s %s %s)' " weglassse, erscheint im Workspace ein 1x0 Zelle die allerdings leer ist:
Code:

val =

   Empty cell array: 1-by-0
 


Die Versuche mit fscanf und dlmread sind ebenso gescheitert.


Ich bin neu in Matlab und komme leider nicht mehr weiter. Kann mir jemand helfen ?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.06.2016, 22:04     Titel:
  Antworten mit Zitat      
Hallo,

optionale Parameter müssten als Parameter-Wert - Paare übergeben werden. Da aber e ohnehin als exponential interpretiert wird, brauchst du das gar nicht angeben. Es reicht

Code:
face_Centers = textscan(fileID, '(%f %f %f)');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nichtnocheiner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2016, 10:50     Titel:
  Antworten mit Zitat      
Hi!

Erstmal vielen Dank für die Hilfe! Es bildet sich nun eine 1x3 Zelle mit dem Namen "face_Centers" in der Workspace. Leider sind die Elemente der Zelle leer, wenn ich mir die Zelle über die Workspace anschaue.

Weiß einer von euch Rat ?


Ich würde dazu gerne einen Screenshot hochladen (.png, 32kB) aber das wird von der Forensoftware unterbunden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Leider sind die Elemente der Zelle leer, wenn ich mir die Zelle über die Workspace anschaue.

Ich hatte es ausprobiert - bei mir sieht es gut aus.

Welches Release nutzt du?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nichtnocheiner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2016, 18:41     Titel:
  Antworten mit Zitat      
Ich benutze R2015b (8.6.0.267246)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.06.2016, 22:12     Titel:
  Antworten mit Zitat      
Hallo,

eben nochmal probiert, und es funktioniert.
Nutzt du auch wirklich dieselbe Datei wie die, die du hier gepostet hast?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nichtnocheiner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2016, 22:25     Titel:
  Antworten mit Zitat      
Ich habe die Datei hochgeladen. Dazu zwei Screenshot mit der Ausgabe der Zelle und dem Inhalt der Zelle, so wie es sich bei mir darstellt.

InhaltDerZelle.png
 Beschreibung:

Download
 Dateiname:  InhaltDerZelle.png
 Dateigröße:  30.52 KB
 Heruntergeladen:  252 mal
zelle.png
 Beschreibung:

Download
 Dateiname:  zelle.png
 Dateigröße:  25.73 KB
 Heruntergeladen:  280 mal
phiSolid.txt
 Beschreibung:

Download
 Dateiname:  phiSolid.txt
 Dateigröße:  1.07 MB
 Heruntergeladen:  335 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.06.2016, 22:44     Titel:
  Antworten mit Zitat      
Hallo,

wenn du eine Datei mit Kopfzeilen hast, musst du sie auch berücksichtigen.
Code:
face_Centers = textscan(fileID, '(%f %f %f)', 'Headerlines', 62645);

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nichtnocheiner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2016, 08:36     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

wenn du eine Datei mit Kopfzeilen hast, musst du sie auch berücksichtigen.
Code:
face_Centers = textscan(fileID, '(%f %f %f)', 'Headerlines', 62645);

Grüße,
Harald


Nochmal vielen Dank für die Hilfe, aber leider bleibt die entstandene 1x3 Zelle leer, wie bei den Screenshots oben. Es wäre super, wenn es mit dem Einlesen der Vektoren durch textscan klappt, denn damit würde ich mir den Workaround unten sparen:

Code:

filename = 'phiSolid.txt';
delimiterIn = '(%f %f %f)';
headerlinesIn = 68149;
import_faceCenters = importdata(filename,delimiterIn,headerlinesIn);

j=1;

for i=62646:68149

E = import_faceCenters(i, 1); % import
F = strrep(E, '(', ''); % ( entfernen
G = strrep(F, ')', ''); % ) entfernen
H(j,1) = regexp(G,'\s+','split'); % splitten

j=j+1;
end

for k=1:5504
   
   I(k,1) = H{k,1}(1,1); % Inhalt der Zelle in Zelle auslesen
   I(k,2) = H{k,1}(1,2); % Inhalt der Zelle in Zelle auslesen
   I(k,3) = H{k,1}(1,3); % Inhalt der Zelle in Zelle auslesen

   x(k,1) = str2double(cell2mat(I(k,1))); % Konvertierung in double
   y(k,1) = str2double(cell2mat(I(k,2))); % Konvertierung in double
   z(k,1) = str2double(cell2mat(I(k,3))); % Konvertierung in double
   
   
end

 


In dem Workaround wird der eingelesene Vektor in 3 einzelne Spaltenvektoren namens x,y und z, jeweils vom Typ double, umgeschrieben.

Die Lösung ist wohl nicht sehr elegant und prozessorfreundlich. Bei 5504 Zeilen geht das noch einigermaßen fix, ich weiß aber noch nicht wie es bei einer größeren Zahl von Vektoren wird. Von daher ist jeglicher Verbesserungsvorschlag erwünscht und sehr gern gesehen!
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 - 2025 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.