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

Wertänderung in Tabellen detektieren und neu abspeichern

 

KOE
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2021, 09:12     Titel: Wertänderung in Tabellen detektieren und neu abspeichern
  Antworten mit Zitat      
Hallo Zusammen,

ich stehe in Matlab noch sehr am Anfang und habe folgendes Problem:

Ich habe eine Sammlung an .txt-Dateien in einem Ordner, die immer dieselben Spalten, aber unterschiedliche Zeilenanzahlen haben. Die Daten bilden Zeitstempel, Messwerte, ... ab und enthalten in der 45. Zeile eine Information zum Zyklus , in dem die Messwerte erfasst wurden.

In der 45. Spalte der Tabellen möchte ich detektieren, wenn eine Wertänderung auftritt (bspw. 0 --> 1, nur Ganzzahlen). Tritt eine derartige Wertänderung auf, so soll eine neue Tabelle abgespeichert und ab diesem Punkt die nächste Wertänderung gesucht werden (1 --> 2 usw.), sodass ich am Ende aus all den Dateien jeweils Tabellen erhalte, die in der 45. Zeile jeweils nur dieselbe Zahl, also 0, 1, 2, ... stehen haben. Die Wertänderungen sind fortlaufend.

Die Schwierigkeit sehe ich darin, dass diese Wertänderungen in einer beliebigen Zeile einer Tabelle auftreten und ich teilweise mehrere Tabellen verknüpfen muss, um so jeweils eine Tabelle für jeden Wert zu generieren.

Ist dies überhaupt möglich und wenn ja, wie kann ich mir das vorstellen?
Ich habe bereits überlegt, ob ich die Tabellen erst zu einer großen Tabelle zusammenfüge und in dieser die Wertänderungen detektiere, allerdings bin ich mir nicht sicher, ob Matlab mit Tabellen der Größenordnung >50 GB etwas anfangen kann.

Die Datei im Anhang enthält den Wechsel 1 --> 2 (in Zeile 52065/52066)
Vorab schonmal vielen Dank für jede Hilfe.

Brauchbaren Code habe ich leider noch keinen. Allerdings die Schlagworte: readtable, find(diff), writetable, splitapply

Beste Grüße
KOE

Cell_log_Group_6_2019_09_03_12_08_11.txt
 Beschreibung:

Download
 Dateiname:  Cell_log_Group_6_2019_09_03_12_08_11.txt
 Dateigröße:  38.99 MB
 Heruntergeladen:  440 mal
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: 02.09.2021, 11:53     Titel:
  Antworten mit Zitat      
Hallo,

für eine Datei:
Code:
data = readtable("Cell_log_Group_6_2019_09_03_12_08_11.txt");
change = find(diff(data.CellGroupChargeCycle_cnt_)>0);
start = [1; change+1];
ende = [change; height(data)];
group = data.CellGroupChargeCycle_cnt_(start);
for k = 1:length(start)
    writetable(data(start(k):ende(k),:), "Cell_log_"+group(k)+".txt")
end


Für mehrere Dateien würde ich datastore verwenden und die Blöcke nacheinander abarbeiten. Wichtig ist dann, bei writetable die Option "WriteMode", "append" zu verwenden.
Da immer nur eine Datei gleichzeitig geladen wird, sehe ich in der Datenmenge kein Problem. Natürlich musst du etwas Geduld mitbringen: für eine Datei dauert das bei mir ca. 6 Sekunden. Wenn du ca. 1000 solcher Dateien hast, sind wir bei 6000 Sekunden bzw. fast 2 Stunden.

Wie groß ist denn der Hauptspeicher? Vermutlich nicht so groß, dass es realistisch ist, den kompletten Datensatz auf einmal zu importieren?

Edit: Wichtig natürlich - erst mal auf einer, dann auf ein paar Dateien testen. Man will ja nicht nach 2 Stunden feststellen, dass was schief gelaufen ist.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
KOE
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2021, 13:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

das hat super geklappt. Ich habe es jetzt soweit ausgebaut, dass ich alle .txt-Dateien des Ordners G6_Test entsprechend durchgehen und die neuen Tabellen schreiben kann. Es dauert zwar seine Zeit, aber bringt mich zu dem gewünschten Ergebnis.

Code:

% Das ist mein gesamtes Programm, vielleicht Hilft es sonst noch jemand bei ähnlichen Problemstellungen.

clear
close all
clc

% Ordner-Pfad, in dem sich die Dateien befinden.
myFolder = 'C:\Users\Admin\Desktop\G6_Test';
% Überprüfen, ob der Ordner vorhanden ist.
% Benutzer warnen, wenn dies nicht der Fall ist.
if ~ isfolder (myFolder)
    errorMessage = sprintf ('Fehler: Der folgende Ordner existiert nicht: \ n% s \ nBitte geben Sie einen neuen Ordner an.', myFolder);
    uiwait (warndlg (errorMessage));
    myFolder = uigetdir ();
    if myFolder == 0    
         return;
    end
end

% ---------------------------------------------------------------------

filePattern = fullfile (myFolder, '*.txt');
theFiles = dir (filePattern);

for i = 1:length(theFiles)
    baseFileName1 = theFiles(i).name;
    fullFileName = fullfile (theFiles (i) .folder, baseFileName1);
    data = readtable(fullFileName);

    change = find(diff(data.CellGroupChargeCycle_cnt_)>0);
    start = [1; change+1];
    ende = [change; height(data)];
    cycle = data.CellGroupChargeCycle_cnt_(start);

    for k = 1:length(start)
        writetable(data(start(k):ende(k),:), "Cell_log_Group_6_Cycle_"+cycle(k)+".txt", "WriteMode", "append")
    end
end

 



An dieser Stelle vielen Dank für die Hilfe.

VG KOE
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: 02.09.2021, 13:52     Titel:
  Antworten mit Zitat      
Hallo,

zusätzliche Tipps:
1. falls du bei dir Unterverzeichnisse erfassen willst, hilft **
2. bei mehreren Durchläufen darauf achten, dass neue Ergebnisse nicht an bereits bestehende Dateien angehängt werden

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.