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 von Datenblöcken aus großer .txt Datei

 

matlab-anfänger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 13:41     Titel: Einlesen von Datenblöcken aus großer .txt Datei
  Antworten mit Zitat      
Hallo zusammen!
Ich habe zwar zu dem Thema schon einiges hier im Forum lesen können, aber da ich Matlab-Anfänger bin, blick ich da zum Teil nicht ganz durch. Vielleicht nimmt sich ja jemand die Zeit, mir zu helfen.

Ich habe einen Messdatenreport als Ascii-file vorliegen, der etwa folgendermaßen aussieht:
Code:
Messungsname
diverse Spezifikationen
ab und zu Leerzeilen

Anzahl 3000

Num, Position, Messwert1, Messwert2, Messwert3, Messwert4, Messwert5
Textzeile

0   0.000   34.0   0.0   0.00   NaN   NaN
1   0.010   56.0   0.0   0.00   NaN   NaN
2   0.044   87.0   0.0   0.00   NaN   NaN
3   0.069   97.0   11.0   0.00   3.4   -8.8
4   0.100   23.0   12.0   0.00   5.7   3.6
....
2999 ....


Der einzulesende Datenblock hat wie oben erkennbar 7 Spalten und soviele Zeilen wie "Anzahl" angibt (hier 3000, kann variieren). Der Delimiter ist scheinbar ein Tab.
Mich interessieren von diesen Daten nur die 3. und 4. Spalte, also Messwert1 und Messwert2, die ich gerne als Matrix oder jeweils als Vektor hätte.
Hilfreich zu wissen ist, dass der Block immer bei Zeile 20 in der .txt Datei beginnt.

Meine Idee wäre, irgendwie den Wert von Anzahl auszulesen, dann ab Zeile 20 alle 3000 Zeilen auszulesen und die Spalten der Messwerte1 und 2 in eine Matrix zu schreiben. Nur wie mache ich das in Matlab? Ich habe mir in der Matlab Hilfe alle Importfunktionen angeschaut, aber mangels Erfahrung bin ich mir nicht sicher, wie ich da dran gehen kann.


Das wäre allerdings nur der erste Teil der Aufgabe. Weiter unten im Messreport liegen noch 3000 (= Anzahl) Felder, die folgendermaßen aussehen, und in eine dreidimensionale Matrix (x*y*Anzahl) geschrieben werden sollen.

Code:
    x1 x2 x3 x4 ... x170
y1 1.0   2.0   3.0   4.0   5.0   ...
y2 3.2   3.5   4.6   ...
...
y80 ...


Das ist natürlich ein ganz schöner Berg von Daten, daher würde ich gern fragen, ob jemand eine Idee hat, wie man das möglichst effizient einlesen kann. Die .txt Dateien können locker 200mb groß sein. Die Zeile, bei der die Blöcke beginnen, lässt sich leicht bestimmen und der Zeilenabstand zwischen den Blöcken ist immer gleich. Aber wie ignoriert man vor jeder Blockzeile das y1 , y2 etc?

Wichtig ist mir aber in erster Linie der erste Aufgabenteil. Da wäre ich schon sehr dankbar, wenn mir jemand helfen könnte.

Beste Grüße!


matlab-anfänger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 14:08     Titel:
  Antworten mit Zitat      
UPDATE:
Mit dem Importwizard kann ich die ersten gewünschten Daten recht zuverlässig einlesen. ist zwar nicht besonders schön, aber läuft...

Code:
function importfile(fileToRead1)
%IMPORTFILE(FILETOREAD1)
%  Imports data from the specified file
%  FILETOREAD1:  file to read

%  Auto-generated by MATLAB on 22-Nov-2011 13:55:12

DELIMITER = '\t';
HEADERLINES = 18;

% Import the file
newData1 = importdata(fileToRead1, DELIMITER, HEADERLINES);

% Create new variables in the base workspace from those fields.
vars = fieldnames(newData1);
for i = 1:length(vars)
    assignin('base', vars{i}, newData1.(vars{i}));
end
 
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 14:21     Titel:
  Antworten mit Zitat      
Hi,
mit Hilfe von TEXTSCAN kannst solche Aufgaben erledigen:
Code:
fid = fopen('test.txt');
data = textscan(fid, '%*d %*f %f %f %*f %*f %*f', 'HeaderLines', 18, 'Delimiter', '\t');
fclose(fid);


siehe
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
matlab-anfänger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 14:53     Titel:
  Antworten mit Zitat      
Danke vielmals. Smile

Werde ich direkt mal testen und nen bisschen rumbasteln. Wenn weitere Fragen auftauchen, melde ich mich wieder.
 
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.