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

Txt-Datei nach bestimmten Kriterien einscannen und Plotten

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 02.05.2018, 17:31     Titel: Txt-Datei nach bestimmten Kriterien einscannen und Plotten
  Antworten mit Zitat      
Servus Leute,

ich brauche mal wieder eure Hilfe.

Ich hab hier eine *.txt Datei die ich einlesen muss.
Das einlesen ist eigentlich nicht das Problem, das mache ich wie folgt.

Code:

clc;
clear all;
close all;

fid=fopen('Beispiel.txt','rt');
daten=textscan(fid,'%f %f %*f', 'Headerlines',7);
maxSize = max(cellfun(@numel,daten));    
fcn = @(x) [x; nan(maxSize-numel(x),1)];
cmat = cellfun(fcn,daten,'UniformOutput',false);  
cmat = horzcat(cmat{:}) ;
a = cmat(:,1);
b = cmat(:,2);
fclose(fid);

%%
figure
plot(cmat(:,1),cmat(:,2));
grid on;
 


Das Problem liegt hier bei das die Messungen immer bei einer gewissen Zeit aufgenommen wird bzw. diese als "Block" abgespeichert wird.
Ich weiß nicht genau wie ich das Umschreiben soll, deswegen hab ich euch mal eine Beispiel Datei in den Anhang gesetzt. Das Muster ist glaube ich sehr einfach zu erkennen.

1/3 t = 10.7 s
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21


wenn ich so etwas hier habe brauche ich die "10.7 s" und die dazugehörigen Spalten 1 und 2..
Das ganze kann sich n-mal wiederholen.
Und am Ende der Geschichte brauche ich noch einen 3D Plot der ungefähr wie im angehängten Bild aussieht. (Leider nur ein Ausschnitt da ich nicht viel zeigen kann).

Ich danke euch vielmals.

BspPlot.PNG
 Beschreibung:

Download
 Dateiname:  BspPlot.PNG
 Dateigröße:  126.27 KB
 Heruntergeladen:  302 mal
Beispiel.txt
 Beschreibung:

Download
 Dateiname:  Beispiel.txt
 Dateigröße:  336 Bytes
 Heruntergeladen:  449 mal
Private Nachricht senden Benutzer-Profile anzeigen


JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 02.05.2018, 18:43     Titel:
  Antworten mit Zitat      
Habe hier einen Ansatz gefunden. Diesen bekomme ich aber leider nicht auf mein Problem angepasst da dieser nicht "t=" findet. Zumindest meine Vermutung.
Vielleicht weiß jemand wo hier mein Problem liegt.

Code:
% read file as a cell-array of lines
fid = fopen('1.txt', 'rt');
% C = textscan(fid, '%f %f %*f', 'Delimiter','');
C = textscan(fid, '%f %f %*f','Headerlines',7);
%C = C{2};
fclose(fid);

% remove separator lines
%C(strncmp('---',C,3)) = [];

% location of section headers
headInd = [find(strncmp('t = ', C, length('t = '))) ; numel(C)+1];

% extract each section
num = numel(headInd)-1;
blocks = struct('header',cell(num,1), 'data',cell(num,1));
for i=1:num
    % section header
    blocks(i).header = C{headInd(i)};

    % data
    X = regexp(C(headInd(i)+1:headInd(i+1)-1), '\s+', 'split');
    blocks(i).data = str2double(vertcat(X{:}));
end
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 03.05.2018, 09:00     Titel:
  Antworten mit Zitat      
Vielleicht habe ich mich oben nicht ganz so richtig ausgedrückt.

zum Zeitpunkt t = 10.7s
Sollen die ersten zwei Spalten zugeordnet werden.
D.h. ich extrahiere die "10.7" und Ordner dieser Zeit die ersten zwei Spalten zu.
Und das soll für die ganze File geschehen.
Sprich danach kommt der nächste Block mit dem Wert t = 20.7
und auch hier sollen wieder die ersten zwei Spalten zu diesem Wert zugeordnet werden.

Ich hoffe ihr könnt mir da weiterhelfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 04.05.2018, 17:03     Titel:
  Antworten mit Zitat      
So jetzt habe ich es geschafft das er ein cell Aufbaut wo alle Messungen zu den verschiedenen Zeiten einzeln abspeichert.
Sprich das die Blöcke in der Text-Datei separiert werden.
Code:
fmt = '%f %f';
fid=fopen('1.txt','r');
k = 1;

while (~feof(fid))
    k = k+1;
    c(k-1,1)=textscan(fid,fmt,'collectoutput',true,'HeaderLines',7);
end
fid=fclose(fid);


Raus bekomme ich dann ein
c =

116×1 cell array

Jetzt kommt aber das eigentliche Problem wie Ordne ich die dazu gehörigen Zeiten zu den jeweiligen Blöcken hinzu?
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.