Verfasst am: 15.05.2024, 08:46
Titel: textscan für CSV-ähnliche Datei
Guten Morgen,
nach langer Matlab-Abstinenz versuche ich mich wieder darin, CSV-ähnliche Daten per Matlab einzulesen.
Die Daten sind in einer Textdatei, die als zwei CSV-Dateien hintereinander, getrennt durch eine Leerzeile, betrachtet werden kann.
Die erste Hälfte ist kurz und macht keine Probleme. Die zweite Hälfte ist ziemlich lang; die anhgehängte Dummy-Datei zum Texten ist stark gekürzt. Deswegen ist ein zeilenweises Einlesen mit fgetl() keine Option.
Die Datei endet immer auf eine Leerzeile.
Mein Ansatz:
Code:
% Test Dummy read % Suche nach Einlesefehler textscan
Ich nutze den (zweiten) Tabellenkopf, um zwischen Text- und Zahlenspalten zu unterscheiden. Daraus bastele ich einen Formastring für textscan(). Letzteres scheint sich allerdings an leeren Text-Zellen zu verschlucken.
Ausgabe:
Code:
formatSpec =
%f;%s;%s;%f;%f;%f;%f
Error using textscan
Mismatch between file and format string.
Trouble reading literal string from file (row 1u, field 4u) ==> \n
Error in TestReadDummyFile (line51)
Result = textscan(fid, formatSpec, nrows, 'headerlines', r, 'headercolumns', c,...
% Tabellenzeilen (restliche Dateilaenge) zaehlen
tblStart = ftell(fid);
nLines = 0;
while ~feof(fid) line = fgetl(fid);
nLines = nLines+1;
end
nLines;
fseek(fid, tblStart, 'bof');
% Eine Leerzeile am Ende
nLines = nLines - 1;
% Tabelle einlesen
Result = cell(nLines, numel(TblFmt));
for i = 1:nLines
line = fgetl(fid);
Ci = strsplit(line, delimiter, 'CollapseDelimiters', false);
Result(i,:) = Ci;
end
Nachtrag: readtable() funktioniert und ist schnell genug.
_________________
--
The programmer suggested it.
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.