|
|
Dateien zusammenfügen, wenn die Namen übereinstimmen |
|
wgttzs! |
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.01.2022, 21:52
Titel: Dateien zusammenfügen, wenn die Namen übereinstimmen
|
|
Liebe Gomatlab Gemeinde,
ich habe zwei Pfade aus denen ich Dateien einlese. Wenn die ersten drei Buchstaben übereinstimmen. Dann sollen die Dateien zusammengefügt werden. Nur leider funktioniert das ganz und gar nicht. Stattdessen werden die alten Dateien abgelegt und gespeichert. Wie komme ich das am besten hin?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.01.2022, 09:23
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Dann sollen die Dateien zusammengefügt werden. |
Heißt was genau? Die Dateien enthalten verschiedene Variablen, und die Ergebnisdatei soll alle enthalten? Oder enthalten sie Variablen gleichen Namens, die verkettet werden sollen? Oder eine Kombination von beidem? Oder was ganz anderes?
Zitat: |
Nur leider funktioniert das ganz und gar nicht. |
Und das heißt? Was erwartest du, was passiert stattdessen? Gerade wenn man den Code nicht selbst laufen kann, ist es wichtig, dass du das genau beschreibst.
Im Debugging-Modus kannst du Schritt für Schritt den Code durchgehen und in jedem Schritt schauen, was passiert.
Ein Problem sehe ich schon mal: mit save werden nur Variablen gespeichert, die im Workspace liegen. Du musst also die Inhalte der .mat-Dateien erst mal laden.
Wenn die Dateien in den Pfaden automatisch generiert werden, kann es einfacher und effizienter sein, auch die zusammengeführten Dateien direkt mit zu generieren.
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.01.2022, 15:39
Titel:
|
|
Vielen Dank für die Antwort!
Die Dateien von ex (liegt als Finale-Datei als table vor) enthalten zwei Spalten und die Dateien von seq (liegen als double vor) eine Spalte. Alle drei Spalten sind gleich lang. Die Dateien für ex werden in einem anderem Skript vorher generiert. Hier ist der Code dafür:
Für das Skript in dem die Dateien zusammengesetzt werden, deren ersten drei Buchstaben gleich sind, habe ich mich an dem Code orintiert:https://de.mathworks.com/matlabcentral/answers/553771-merge-files-with-the-same-prefix
Dort verstehe ich alles bis zur zweiten for Schleife.
Bis a=cell(n); hier funktioniert auch alles wie es sollte und bis dahin steige ich selbst noch durch.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.01.2022, 16:53
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Die Dateien von ex (liegt als Finale-Datei als table vor) enthalten zwei Spalten und die Dateien von seq (liegen als double vor) eine Spalte. Alle drei Spalten sind gleich lang. |
D.h. beide .mat-Dateien enthalten genau 1 Variable? Nach deinem Code würde ich eher vermuten, dass dem nicht so ist.
Was soll nun das Ergebnis sein? Ein Table mit 3 Spalten oder eine Matrix mit 3 Spalten? Wie soll diese Variable heißen?
Kann es sein, dass zu einer Datei aus _seq mehrere aus _ex gehören bzw. umgekehrt? Falls nicht, brauchst du keine zweite Schleife. Es ist jedenfalls nicht sinnvoll, die Schleife über k_2 laufen zu lassen und k_2 darin nicht zu verwenden.
Wie sich das "nicht funktionieren" nun äußert, weiß ich immer noch nicht.
Was wie gesagt fehlt ist das Laden der Daten.
Grundsätzlich wäre meine Empfehlung, die Vorgehensweise für ein Dateien-Paar zum Laufen zu bekommen und das dann über eine for-Schleife zu erweitern.
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.01.2022, 17:58
Titel:
|
|
Zitat: |
Wie sich das "nicht funktionieren" nun äußert, weiß ich immer noch nicht. |
Es äußert sich dadurch, dass ich am Ende zwar alle Dateien ausgeben habe, aber die 1 zu 1 mit denen _ex Dateien übereinstimmen
Zitat: |
D.h. beide .mat-Dateien enthalten genau 1 Variable? Nach deinem Code würde ich eher vermuten, dass dem nicht so ist.
Was soll nun das Ergebnis sein? Ein Table mit 3 Spalten oder eine Matrix mit 3 Spalten? Wie soll diese Variable heißen? |
Das Ergebnis soll ein Table sein mit den ersten drei Buchstaben, die bei beiden Dateien (_ex Dateien(432,2) und _seq(432,1)) gleich sind und mit der Endung _merged.
Zitat: |
Kann es sein, dass zu einer Datei aus _seq mehrere aus _ex gehören bzw. umgekehrt? Falls nicht, brauchst du keine zweite Schleife. Es ist jedenfalls nicht sinnvoll, die Schleife über k_2 laufen zu lassen und k_2 darin nicht zu verwenden. |
Jeweils eine Datei von _seq gehört zu einer anderen _ex Datei
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.01.2022, 21:00
Titel:
|
|
Hallo,
Zitat: |
Das Ergebnis soll ein Table sein mit den ersten drei Buchstaben, die bei beiden Dateien (_ex Dateien(432,2) und _seq(432,1)) gleich sind und mit der Endung _merged. |
Na, dann musst du den Table auch irgendwann erstellen. Wobei ich die Table-Variable generisch nennen würde und nur die .mat-Datei , in die du den Table schreibst, abhängig von den Daten. Und dazu musst du (immer noch) erst mal die .mat-Dateien importieren. Auch wäre es gut, diese ersten drei Buchstaben mal zu extrahieren.
Zitat: |
Jeweils eine Datei von _seq gehört zu einer anderen _ex Datei |
Dann brauchst du wie gesagt keine for-Schleife, sondern kannst direkt
weiterverwenden.
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.01.2022, 22:14
Titel:
|
|
Ich habe versucht alles was du schreibst abzuarbeiten:
Ich habe von beiden Dateien Tables und habe alle überflüssigen for Schleifen rausgeschmießen.
Ich bekomme aber folgende Fehlermeldung All tables being vertically concatenated must have the same number of variables. Obwohl beide Dateien (431,1) und (431,2) genauso lang sind. Kann ich am Ende alle Dateien zusammenfügen? Also jeweils die zwei Spalten und dazu die dritte und am Ende für alle Dateien im Ordner?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.01.2022, 09:43
Titel:
|
|
Hallo,
Zitat: |
Obwohl beide Dateien (431,1) und (431,2) genauso lang sind. |
Variablen, nicht Dateien. Vor allem aber hilft das nichts, wenn du sie vertikal, also untereinander verkettest. Du müsstest sie horizontal verketten, also horzcat.
Die Weiterverwendung von files_ex{x} besteht schon in mehr als copy-paste und ;. Du musst diese Datei importieren. Die erste zu importierende Datei sollte m.E. files_seq{k} sein, weil du mit dem find-Befehl ja nach der passenden _ex - Datei dazu suchst.
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.01.2022, 12:04
Titel:
|
|
Vielen Dank!
Aber wieso brauche ich keine zweite Schleife? Ich zähle dann 52 Dateien, die ich um eine Spalte ergänze. Diese müsste ich dann noch zu einer Datei machen mit vertcat
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.01.2022, 13:21
Titel:
|
|
Hallo,
Zitat: |
Aber wieso brauche ich keine zweite Schleife? |
Weil du zu jeder Datei in einem Verzeichnis genau eine passende im anderen hast. Es reicht also vollkommen, über die Dateien in einem Verzeichnis zu iterieren.
Wieso hast du jetzt auf einmal files statt files_ex?
Wichtig ist, dass du immer die passende Datei importierst. Zusammen mit anderen Anpassungen also:
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.01.2022, 16:37
Titel:
|
|
Zitat: |
Wieso hast du jetzt auf einmal files statt files_ex? |
Da ich ja mit import gleich die passenden Spalten raussuche, muss ich nicht mehr die "umgewandelten" _ex files mehr nehmen.
[code]Finale_Datei=horzcat(s(:,[1,10]),b(:,1)); [/code
Kann ich nach der Zeile gleich nochmal alle merged Dateien zusammenfügen zu einer Datei oder brauche ich dafür nochmal eine for Schleife?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.01.2022, 16:40
Titel:
|
|
Hallo,
die Frage ist, was du nun unter diesem "zusammenfügen" verstehst. Wenn es ein Untereinanderhängen der Daten ist:
vor der Schleife:
allContent = [];
in der Schleife:
allContent = [allContent; Finale_Datei];
nach der Schleife:
% abspeichern von allContent
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 ;)
|
|
|
wgttzs! |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 02.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.01.2022, 18:14
Titel:
|
|
Vielen, vielen Dank! Ich konnte jetzt sogar den Code noch weiter ausbauen.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|