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

Textdatei zerlegen und analysieren!!!

 

FishermanJack
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2017, 00:51     Titel: Textdatei zerlegen und analysieren!!!
  Antworten mit Zitat      
Hallo, ich bin neu hier und benutze seit einigen Tagen Matlab.
Leider komme ich nicht so recht mit dem und wollte mich hier beraten lassen.
Es geht um folgendes:
Ich habe ein . txt File das so Aussieht:

Element 1 A B
Datum I [kA] P [MW] Q [MVAr] Auslastung [%] Ploss [MW] Qloss [MVAr]
01-Jan-2016 00:00 0.072764 -11.221024 9.676507 16.537281 0.046547 -0.320333
01-Jan-2016 00:15 0.072764 -11.221024 9.676507 16.537281 0.046547 -0.320333
01-Jan-2016 00:30 0.075410 -11.476784 10.170571 17.138632 0.049610 -0.313734
Element 2 C D
Datum I [kA] P [MW] Q [MVAr] Auslastung [%] Ploss [MW] Qloss [MVAr]
01-Jan-2016 00:00 0.059806 -5.478059 10.849443 13.592312 0.033281 -0.341703
01-Jan-2016 00:15 0.056954 -4.063243 10.833959 12.944129 0.030693 -0.345954
01-Jan-2016 00:30 0.058824 -5.033469 10.832931 13.369067 0.032369 -0.342679

mit N Zeilen und M Elementen ( N für jedes Element gleich ).
Die Spalten sind fix.

Jetzt wurde ich gerne eine funktion schreiben welche mir alle Elemente Speichert, so dass ich beim Abrufen von jeweiligen Element die Daten bekomme so dass ich diese Analysieren kann(z.b Element 1 A B, plot I über Datum.
Habe vieles versucht mit textscan, fopen aber bin zu der lösung nicht gekommen.
Hoffe ihr könnt mir weiterhelfen.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.11.2017, 09:52     Titel:
  Antworten mit Zitat      
Hallo,

textscan ist der richtige Ansatz. Bitte poste auch deinen Code und welche Probleme damit aufgetreten sind.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
huhu0815
Forum-Century

Forum-Century


Beiträge: 141
Anmeldedatum: 20.02.14
Wohnort: Dresden
Version: R2013b, R2014b, R2016b, R2018a
     Beitrag Verfasst am: 12.11.2017, 11:01     Titel:
  Antworten mit Zitat      
Hallo

mit textscan und regexp geht das relativ komfortabel.

Alternativ kannst du mit fopen , fclose , feof , sowie fgetl Zeile für Zeile einlesen.
Mit strfind oder strtok kann man sich die Elemente herausholen.

Mit Ersterem ist man sehr schnell am Ziel, ist aber auch der schwierige Weg. Beim
Zweiten hat man viel mehr Tipparbeit, aber einfacher zu verstehen.

P.S.: Schau als erstes mal die Dokumentation zu den angegebenen Funktionen durch Wink
_________________

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
FishermanJack
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2017, 11:21     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Hier mein Code bis jetzt:

%% Variablen
filename = 'test.txt';
delimiter = '\t';
startrow = 3;
rows = 7;
columns = 7;

%% Read columns of data as text:
formatSpec = '%s%f%f%f%f%f%f%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to the format.
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter,'EmptyValue',NaN, 'HeaderLines',2);
%% Close the text file.
fclose(fileID);

%% Allocate imported array to column variable names
Datum = dataArray{:, 1};
I = dataArray{:, 2};
P = dataArray{:, 3};
Q = dataArray{:, 4};
Auslastung = dataArray{:, 5};
Ploss = dataArray{:, 6};
Qloss = dataArray{:, 7};
%% Plot
%% 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));

% Convert the contents of columns with dates to datetimes using the
% specified date format.
try
dates{1} = datetime(dataArray{1}, 'Format', 'dd-MMM-yyyy HH:mm', 'InputFormat', 'dd-MMM-yyyy HH:mm');
catch
try
% Handle dates surrounded by quotes
dataArray{1} = cellfun(@(x) x(2:end-1), dataArray{1}, 'UniformOutput', false);
dates{1} = datetime(dataArray{1}, 'Format', 'dd-MMM-yyyy HH:mm', 'InputFormat', 'dd-MMM-yyyy HH:mm');
catch
dates{1} = repmat(datetime([NaN NaN NaN]), size(dataArray{1}));
end
end

dates = dates(:,1);

%% Split data into numeric and string columns.
rawNumericColumns = {};

%% Replace non-numeric cells with NaN
R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),rawNumericColumns); % Find non-numeric cells
rawNumericColumns(R) = {NaN}; % Replace non-numeric cells

%% Create output variable
test = table;
test.Element = dates{:, 1};

Hier habe ich mir Hilfe auch durch das Import Toll verschafen, aber ich bekomme das Problem das die Werte nur bis zum nächten Element gespeichert werden und ich weiss nicht wie ich diese dann zu einer Matrix verbinde.

Dann habe ich mir gedacht das ich eine Variable für Headerlines konstruiere wo die Namen der Elemente gespeichert werden sollten.

HeaderLines = cell(1, N);

while ~feof(fid)
k = k+1;
Line = fgetl(fid);
if ischar(Line)
break;
end
aber dies hat auch iergendwie nicht funtkioniert. Sad Sad

Ich entschuldige mich wen es Triviale Fehler gibt, da ich mich erst seit ein paar Tagen mit Matlab beschäftige.

DANKE Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
FishermanJack
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2017, 11:43     Titel:
  Antworten mit Zitat      
@huhu0815 danke für den Tipp,
habe schon einiges im Internet mit regexp gefunden jedoch ist mir das nicht so klar,
werde wahrscheinlich mehr Tippen müssen Laughing Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
FishermanJack
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2017, 09:23     Titel:
  Antworten mit Zitat      
ok, habe den Code jetzt

ffs = 'testNew.txt';
str = fileread( ffs );
xpr = '(?m)^Element\s+\d+\s+\w+\s+\w+\s*$';
[ block_list, headers ] = strsplit( str, xpr ...
, 'DelimiterType','RegularExpression' ...
, 'CollapseDelimiters',false );
block_list(1) = []; % Assumption: the first line is a delimiter
%%
Out = struct( 'BlockHead',headers, 'ColHead',{''}, 'Data',{[]} );

for jj = 1 : length( block_list )
Out(jj).BlockHead = strtrim( headers{jj} );
block = strtrim( block_list{jj} );
cac = textscan( block, '%s', 1, 'Delimiter','\n' );
Out(jj).ColHead = cac{:};
cac = textscan( block , '%s%s%f%f%f%f%f%f' ...
, 'HeaderLines' , 1 ... % strsplit captured one
, 'Delimiter' , {'\t',char(32)} ...
, 'CollectOutput' , true );
dt = strcat( char(cac{1}(:,1)), char(cac{1}(:,2)) );
sdn = datenum( dt, 'dd-mmm-yyyyHH:MM' ); % serial date number
Out(jj).Data = cat( 2, sdn, cac{2} );
end

nur das Problem ist,
>> Out(1)
ans =

scalar structure containing the fields:

BlockHead = Element 1 138_3C 138_3B
ColHead =
{
[1,1] = Date I [kA] P [MW] Q [MVAr] Auslastung [%] Ploss [MW] Qloss [MVAr]
}
Data = [](0x0)

das die Data nicht vorhanden ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.