.txt/.dat Datei komplett in Matlab als Matrix einlesen
Luftus
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.04.2017, 08:57
Titel: .txt/.dat Datei komplett in Matlab als Matrix einlesen
Hallo zusammen,
ich scheitere seit Tagen an dem Versuch einen .dat bzw. .txt Datei in Matlab einzulesen. Das Problem an der Datei ist, dass sie aus Text und Zahlen besteht und relativ unregelmäßig aufgebaut ist. Ich habe schon textscan oder auch fget ausprobiert, aber da sich das Format immer wieder ändert und das in der Originaldatei in 1000 Zeilen wäre es sehr mühsam immer wieder Matlab das Format vorgeben zu müssen.
Gibt es einen "einfachen" Befehl, der mir die Daten der Datei in einzelne Zellen einer Matrix speichert analog zu Excel?
Besten Dank für Eure Hilfe!!!
Gruß Luftus
P.S.: Die Version die ich an der Uni zur Verfügung habe ist die R2012...
wenn es diesen Befehl gäbe, was würdest du mit den dann unstrukturierten Cell Arrays anfangen?
Ich würde es anders angehen: welche Daten brauchst du aus dieser Datei?
Dann eine Schleife folgender Art:
while ~feof(fid)
textscan(...) % Daten einlesen
fgetl % nicht benötigte Daten überspringen
Grüße,
Harald
Luftus
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.04.2017, 09:12
Titel:
Hallo Harald,
danke für die schnelle Antwort. Das Problem ist, dass ich alle Inhalte der Datei benötige. Ich habe insgesamt vierzig solcher Files und möchte die alle als Schleife dann am Schluss in Matlab einlesen und dann im Folgenden ein Programm schreiben, welches mir verschiedene Diagramme plottet. Da ich alles automatisiert haben möchte, brauche ich auch die einzelnen Spalten- und Zeilenüberschriften...
Das Problem ist, dass ich alle Inhalte der Datei benötige.
Das wäre das erste Mal, dass ich das bei einer so unregelmäßig aufgebauten Datei erlebe.
Im Zweifelsfall kannst du mit einer Schleife über fgetl alle Zeilen der Reihe nach einlesen. Es dürfte jedoch mühsam sein, die Daten dann auszusortieren.
danke für Eure Hilfe. Die Lösung in einer Zelle ist schon mal nicht schlecht. Einen Befehl um alles nicht in einer Zelle sondern in verschiedenen Zellen, quasi einer Matrix, zu speichern, gibt es nicht, oder? Weil auch wenn es unglaublich klingt, aber ich benötige tatsächlich alle Inhalte der Datei Und jede einzelne Zeile einzulesen ist dann doch mühsam, besonders da ja innerhalb einer Zeile auch Text und Zahlen stehen...
kannst richtig geil Sachen suchen. les dir mal bisschen was durch.
Luftus
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.04.2017, 09:30
Titel:
Hallo zusammen,
ich habe Eure Vorschläge mal ausprobiert und das mit fgetl funktioniert auch relativ gut. Allerdings specihert er mir im Moment immer nur die letzte Zeile meiner Datei in die Matrix A ab. Wie kann ich jede einzelne Zeile dort untereinander in Zeilen drucken lassen?
Und gibt es anschließend die Möglichkeit die einzelnen Zeilen nach Tabs zu durchsuchen und dann in Spalten aufzuteilen?
Kann ich die einzelnen tline-Zeilen, die ich in A schreibe auch untereinander und nicht nebeneinander speichern? Dann könnte ich mir das transponieren sparen...
Mit strsplit speichert es jetzt die einzelnen Werte in ein Cell Array, das innerhalb von A steht. Kann ich die einzelnen Werte auch direkt in die Matrix A schreiben lassen?
tline = fgetl(fid); % nimmt Zeile für Zeile aus dem File
A = {}; % Initialisiert Matrix
whileischar(tline)% sucht nach Zeichen in jeder Zeile
C = strsplit(tline,'\t'); % trennt die Zeichen nach Tabs und speichert die Zeile als Cell Array
A{end+1} = C; % schreibt die Zeilen spaltenweise hinterienander
tline = fgetl(fid); % springt zur nächsten Zeile end
B = transpose(A); % transponiert A, damit Zeilen untereinander stehen
whileischar(tline)% sucht nach Zeichen in jeder Zeile
C = strsplit(tline,'\t'); % trennt die Zeichen nach Tabs und speichert die Zeile als Cell Array
A(end+1, 1:numel(C)) = C; % schreibt die Zeilen spaltenweise hinterienander
tline = fgetl(fid); % springt zur nächsten Zeile end
%B = transpose(A); % transponiert A, damit Zeilen untereinander stehen
vielen, vielen Dank so hab ich mir die Struktur vorgestellt.
Nun hab ich nur noch das Problem, dass ich zwar auf die einzelnen Zellen zugreifen, aber noch nicht mit Ihnen rechnen kann, da die Daten im Moment noch characters und keine Zahlen sind...
Gibt es da einen einfachen Befehl? Ich dachte daran jede Zeile dahingehend zu überprüfen, ob sie mit einer Ziffer oder einem minus beginnt. Jedoch komme ich mit der Matlabsyntax noch nicht ganz klar...
whileischar(tline)% sucht nach Zeichen in jeder Zeile
C = strsplit(tline,'\t'); % trennt die Zeichen nach Tabs und speichert die Zeile als Cell Array
A(end+1, 1:numel(C)) = C; % schreibt die Zeilen spaltenweise hinterienander
tline = fgetl(fid); % springt zur nächsten Zeile end
Verfasst am: 07.11.2018, 13:46
Titel: .txt/.dat Datei komplett in Matlab als Matrix einlesen
Grüß euch,
ich hänge an einem ähnlichem Problem, wie auch schon Luftus im Jahr zuvor. Ich möchte eine .dat Datei in Matlab einlesen (.dat ist hier nicht erlaubt, darum als .txt hochgeladen). Mit der Lösung von Luftus komme ich da nicht weiter. Habt ihr eine Lösung? Sollte ein 3761x18 Array ergeben.
Ich brauche eigentlich nur die Werte und keine Überschriften.
deine Datei ist einfacher strukturiert. Da sollte z.B. textscan mit einer passenden Anzahl Kopfzeilen schon ausreichen.
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 ;)
Einstellungen und Berechtigungen
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
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.