Hallo,
ich versuche schon ewig verzweifelt eine txt-Datei einzulesen.
Die schwierigkeit besteht darin, dass die "Tabelle" nicht immer die gleiche Spaltenanzahl besitzt. Schwierig zu erklären...
im anhang ist sie mal beigefügt.
Die ersten zwei Spalten hätte ich gern als String und den Rest eben als Zahl. Bekomms aber leider nicht hin. Vielleicht kann mir einer helfen!
Getrennt sind alle Werte durch Tab
die Blöcke sind immer gleich strukturiert, oder? Dann in etwa so:
Code:
fid = fopen('file.txt');
data = {};
while ~feof(fid)
newdata = % Einen Block einlesen mit textscan, vermutlich mit min. 2 textscan-Befehlen % newdata an data anhängen end fclose(fid);
Hallo Harald,
ich bin nun soweit, dass ich alles einlesen kann, nur steht momentan jeder String in einer extra Zelle.
Code:
fid = fopen('config_mod.txt');
data = {};
while ~feof(fid)
newdata =textscan(fid,'%s','delimiter','\t'); % Einen Block einlesen mit textscan, vermutlich mit min. 2 textscan-Befehlen end fclose(fid);
b = ~cellfun('isempty', newdata{1}); % Alle leeren Zellen indizieren
c=newdata{1}(b); % Alle leeren Zellen löschen % Ein "Block" erstreckt sich nun über 78 Zellen
Muss man sicher noch dran arbeiten.
Ein Problem ist übrigens, dass der dritte Block nur eine Kopfzeile hat, während die anderen zwei Kopfzeilen haben.
Wichtig ist auch, dass man sich nur die Informationen aus der Datei holen sollte, die man braucht, und alles andere mit * überspringt. Die Informationen, die man braucht, sollte man dann so organisieren, dass man anschließend gut damit arbeiten kann (was natürlich wiederum davon abhängt, was du mit den Daten dann machen willst).
Hallo Harald,
erstmal vielen lieben Dank für deine Mühe!
Ich werde deine Version gleich mal versuchen umzusetzen. Das mit dem 3. Block war ein Fehler. Die Zeile fehlte.
Hier erstmal mein Code, der zwar funktioniert aber wahrscheinlich nicht der schöneste ist
Code:
fid = fopen(ConfigDatei);
while ~feof(fid)
newdata = textscan(fid,'%s', 'delimiter', '\t', ...
'commentStyle', '%');
end fclose(fid);
b = ~cellfun('isempty', newdata{1}); % Alle leeren Zellen indizieren
c=newdata{1}(b); %Alle leeren Zellen löschen
%Ein Block ist 78 Zellen
d={1:Spalten};
for i=1:Spalten
d{i}=cell(6,18);
d{i}(1,1:3)=c(1:3); c(1:3)=[]; % 1.. Spalte
d{i}(2,1:3)=c(1:3); c(1:3)=[]; % 2. Spalte
d{i}(3,1:Spalten)=c(1:Spalten);c(1:Spalten)=[]; % 3.Spalte
d{i}(4,:)=c(1:Spalten);c(1:Spalten)=[];
d{i}(5,:)=c(1:Spalten);c(1:Spalten)=[];
d{i}(6,:)=c(1:Spalten);c(1:Spalten)=[];
end
Ich bin ziemlich neu, was Matlab-Programmierung angeht, und habe schon den gestrigen Tag mit suchen verbracht.
Nun ist dieser Thread, glaube ich, am passendsten.
Ich bekomme vom Messgerät eine*.asc Datei ausgegeben. Die Datei hat 35 Spalten und 600 Zeilen. jedoch sollen die ersten 2 Spalten Wegfallen(Datum,Uhrzeit).
Problem dabei, dass die Tabelle nicht vollständig gefüllt ist.
Wie kann man die tabelle einlesen, so dass die nicht vollständig ausgefüllten zeilen wegfallen, die Headerdateien aber bleiben. Und aus jeder spalte ein Spaltenvektor entsteht.
Vielen Dank für die Hilfe im Voraus. Im Anhang ist der Anfang meiner Datei
konnte ich die Datei einlesen und eine Matrix erstellen.
Jedoch habe ich das Problem, dass ich nicht immer händisch die Kommas ersetzen will. Und die Funktion (gefunden im Forum)
Code:
function comma2point(File) % Generate a new file named Oldfilename_Modified.ending. In the new File all % ',' are changed to '.' Needs a full datapath and filename as input.
Bei deinem Aufruf/Fehler würde ich davon ausgehen, dass du bei Aufruf der Funktion den Pfad wechselst und Matlab die Datei nicht mehr sieht.
Aber wenn es mit absolutem Pfad auch auftritt, bin ich nahezu ratlos.
Hast du mal einen Breakpoint bei copyfile gemacht und dir angeschaut, was in File drinsteht und ob die Datei wirklich so existiert, wie in der Variable steht?
Grüße
Chris
_________________
--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Richtig fragen!
Wenn es sich um einen Rechner auf Arbeit handelt und die Datei evtl. im Netzwerk liegt, hast vielleicht keine Schreibrechte, da eine copy Befehl ausgeführt wird...
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.