ich habe im Anhang meine Daten gesammelt, die ich bei der UNI auf dem Ruder-Ergometer so abgeleistet habe ...
Ich dachte, wenn ich die Spalten mit Tabulator trenne, anstatt mit Komma,
dann würde das auch korrekt sein... und dürfte beim Einlesen keine Probleme
verursachen... Aber falsch gedacht ...
ich bekomme die Daten nur als Cell Array rein, unzwar mit importdata ...
und dann kann in das Cell Array nicht separat auf die Spalten drauf zugreifen ..
Würdet ihr mir bzgl. Erstellen solcher Daten in eine txt-Datein ein Tip geben ??
und vielleicht noch ein, wie ich diese txt-Datei mit textrad, dlmread oder importdata oder auch fscanf richtig einlesen könnte bzw. wie ich mein Cell Array auflöse ??
%% Import data from text file. % Script for importing data from the following text file:
%% Initialize variables.
filename = 'X\X\X\X\RudernUwe.txt'; % hier Pfad noch eingeben
delimiter = '\t';
startRow = 2;
endRow = 92;
%% Read columns of data as text: % For more information, see the TEXTSCAN documentation.
formatSpec = '%s%s%s%s%s%s%s%s%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to the format. % This call is based on the structure of the file used to generate this % code. If an error occurs for a different file, try regenerating the code % from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
%% Close the text file. fclose(fileID);
%% Convert the contents of columns containing numeric text to numbers. % Replace non-numeric text with NaN.
raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
for col=1:length(dataArray)-1
raw(1:length(dataArray{col}),col) = mat2cell(dataArray{col}, ones(length(dataArray{col}), 1));
end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));
for col=[1,3,4,5,6,7] % Converts text in the input cell array to numbers. Replaced non-numeric % text with NaN.
rawData = dataArray{col};
for row=1:size(rawData, 1) % Create a regular expression to detect and remove non-numeric prefixes and % suffixes.
regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
try
result = regexp(rawData(row), regexstr, 'names');
numbers = result.numbers;
% Detected commas in non-thousand locations.
invalidThousandsSeparator = false;
if numbers.contains(',')
thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
ifisempty(regexp(numbers, thousandsRegExp, 'once'))
numbers = NaN;
invalidThousandsSeparator = true;
end end % Convert numeric text to numbers. if ~invalidThousandsSeparator
numbers = textscan(char(strrep(numbers, ',', '')), '%f');
numericData(row, col) = numbers{1};
raw{row, col} = numbers{1};
end catch
raw{row, col} = rawData{row};
end end end
%% Split data into numeric and string columns.
rawNumericColumns = raw(:, [1,3,4,5,6,7]);
rawStringColumns = string(raw(:, [2,8]));
%% Make sure any text containing <undefined> is properly converted to an <undefined> categorical
idx = (rawStringColumns(:, 2) == "<undefined>");
rawStringColumns(idx, 2) = "";
%% Create output variable
RudernUwe = table;
RudernUwe.No = cell2mat(rawNumericColumns(:, 1));
RudernUwe.Date = rawStringColumns(:, 1);
RudernUwe.Distance = cell2mat(rawNumericColumns(:, 2));
RudernUwe.Time = cell2mat(rawNumericColumns(:, 3));
RudernUwe.SproM = cell2mat(rawNumericColumns(:, 4));
RudernUwe.Watt = cell2mat(rawNumericColumns(:, 5));
RudernUwe.Kalorien = cell2mat(rawNumericColumns(:, 6));
RudernUwe.VSPLuer = categorical(rawStringColumns(:, 2));
%% Clear temporary variables clearvars filename delimiter startRow endRow formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp rawNumericColumns rawStringColumns idx;
Verfasst am: 12.06.2018, 14:12
Titel: >> jetzt mit txt.-Datei im Anhang
Halloo Uzcyi,
ich habe jetzt meine Datei noch mal angehängt ... sicher keine elegante Variante
Daten einzulesen, um mit "importdata" ein cellarray zubekommen,
Also ich will mit sscanf hinbekommen, alles in ein double-array umzuwandeln ...
Code:
data = importdata('RudernUwe.txt','r');
Testbereich = cell2mat([data(33:44,1)]) % :::::::::::::::::: for k = 1:11
Mtx(k,:) = sscanf(Testbereich(k,:), '%d %f %f %d %d %f %d %*s', [1, inf]);
end;
Mtx
klar , die letzte Spalte mit den Strings muss ich überspringen mit dem *Sternchen ...
aber das Haupt-Problem besteht im Format meines Datums, welches 2 Pkt.-Trennung hat - dd.mm.yy -
und das bekomm ich nicht mit sscanf convertiert ...
Vielleicht könnt ihr mir weiterhelfen ???
Danke vorab...
beste grüße
stoxxii
mit Mtx habe ich zumindest ein double array ... aber besser weiter verarbeiten und berechnen oder plotten kann ich die einzelnen Spalten dann doch noch nicht ...
Woran es hier noch fehlt: den separate Zugriff auf die einzelnen Spalten ...
>> insbes. sieht die Spalte " Datum" nicht gut aus ...
Vielleicht hast du / ihr noch nen Tip ,. Idee ...
Danke vorab ...
grüße
stoxxii
die Version 6.5 R13 kenne ich nicht sagt mir momentan nichts.
Aber ich würde behaupten das du jetzt schon auf die einzelen Spalten eigentlich Zugriff hast?
mit den folgenden Befehl:
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.