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

Zeilen aus verschiedenen CSV-Dateien vergleichen

 

equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 24.05.2017, 16:58     Titel: Zeilen aus verschiedenen CSV-Dateien vergleichen
  Antworten mit Zitat      
Hallo Zusammen Smile

und zwar hab ich folgendes Problem:

ich möchte aus vielen (derzeit noch 50) csv-Dateien die Zeilen miteinander verrechnen, bzw. jeweils eine Spalte aus der Zeile.
Die Dateien besitzen immer 5 Spalten, jedoch kann die Zeilenanzahl Variieren(zwischen ca. 680-700 Zeilen).
Ich möchte aus dem Wert aus Zeile 1, Spalte 4 aller 50 CSV-Dateien zum Beispiel die Standardabweichung bilden (und das dann für alle Zeilen). Im Anhang ist n Screen von 2 csv-Dateien...

Das Problem ist ich bekomm nicht alle Zeilen automatisch so eingelesen damit ich diese verrechnen kann...

Erste Gedanke:

Code:

%k ist die Anzahl aller dateien
Zeile1 = zeros(k,1);
Zeile2 = zeros(k,1);
Zeile3 = zeros(k,1);
for i=1:k
  data=csvread(dat(i).name);
  Zeile1(i,:)=data(1,4);
  Zeile2(i,:)=data(2,4);
  Zeile3(i,:)=data(3,4);
  end

Dies Funktioniert auch einwandfrei, habe da alle Werte aus den 50 csv-Dateien in einer Zeile als double und kann damit weiterrechnen, das Problem, alles bei 700 Zeilen einzugeben wäre sehr aufwendig...

Habe mir um es zu automatisieren dann überlegt einen Double mit größe Zeilen*Excelfiles machen überlegt

Code:

for i=1:k
  data=csvread(dat(i).name);
   %l=size(data,1); % habe ich mal durch den Wert von f=660 ersetzt, da hier...
   f=660;                % sonst wieder eine Fehlermeldung kommt, da die Dateien
   l=1:f;                  % unterschiedliche Zeilenanzahl haben -->Dimensionsfehler
   Zeile=zeros(l,50);
   Zeile(l,i)=data(l,4);
   while i<k
   i=i+1;
   end
  end  


Es erstellt mit zwar die Zeile mit der Dimension 660x50 und füllt die Spalte 50 auch mit den Daten aus der letzten csv-Datei, jedoch alle anderen Spalten sind nur mit 0 gefüllt, wie bekomme ich das hin, damit nach jeder csv-datei eine andere Spalte gefüllt wird?
Ich häng gerade, hatte es auch schon damit es nur die erste Spalte füllt aber alle Very Happy da hängts gerade:DVery Happy

Um es später zu verrechnen könnte ich dann ja einfach z.B.:
Code:
machen, was auch automatisiert werden soll, aber das ist erst später ein Thema und müsste machbar sein:D

Grüße Smile

Ausschnitt_Dimension_Zeile.JPG
 Beschreibung:

Download
 Dateiname:  Ausschnitt_Dimension_Zeile.JPG
 Dateigröße:  29.53 KB
 Heruntergeladen:  252 mal
Private Nachricht senden Benutzer-Profile anzeigen


equi
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 31.05.2017, 11:40     Titel:
  Antworten mit Zitat      
Habs selbst hinbekommen Very Happy
Ab und zu schadet es einfach nicht zwischen durch was anderes zu machen Very Happy
Wollte es komplizierter machen als es ist Rolling Eyes

Code:
%l=size(data,1);  % nur dieses Problem hab ich noch nicht gelöst Very Happy
f=660;
l=length(1:f);
Zeile=zeros(l,k);

for i=1:k
  fid = fopen(dat(i).name);
  data = csvread(fid);
  fclose(fid);

  %Spalte4
   d=data([1:l],4);
   D(:,i)=d;
 
  %Spalte 5
   e=data([1:l],5);
   S(:,i)=e;
 
   end


So schreibt es aus allen csv-Dateien eine bestimmte Spalte in eine Matrix Very Happy

Mein Fehler war ganz simple :
Code:
Zeile=zeros(l,50);

war zwischen for ... end, deswegen hats mir immer wieder die anderen Spalten mit nullen überschrieben Rolling Eyes


Falls jemand weiß wie ich das mit der Zeilenanzahl in Griff bekomme wäre ich dankbar!

Problem: Unterschiedliche Zeilenanzahlen, wenn ich diese immer aus der Datei ziehe sind sie unterschiedlich lang und die Matrix hat dann falsche Dimensionen....

gibt es die Möglichkeit die geringste Zeilenanzahl der csv-Dateien herauszufinden um diese dann als Ausleseende zu definieren?

Grüße
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
equi
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 31.05.2017, 13:00     Titel:
  Antworten mit Zitat      
Habs schon gelöst Very Happy

Hier das ganze Programm falls jemand so etwas ähnliches machen muss

Code:
Zeilenanzahl=zeros(5000,1); % hab einfach mal 5000 angenommen, die größte Zeilenanzahl sind 1500 bei mir aber dann ist noch genügend platz Very Happy

for i=1:k
  fid = fopen(dat(i).name);
  data = csvread(fid);
  fclose(fid);
 
 w=length(data);
 anzahl(:,i)=w;
 
end


Zeilenanzahl=transpose(anzahl);
l=min(Zeilenanzahl)
Zeile=zeros(l,k);

for i=1:k
  fid = fopen(dat(i).name);
  data = csvread(fid);
  fclose(fid);
 
 % Spalte4
   d=data([1:l],4);
   D(:,i)=d;
   
 % Spalte5
   e=data([1:l],5);
   S(:,i)=e;

   end


ist bestimmt nicht die eleganteste Lösung aber es funktioniert Very Happy
_________________

Grüße Equi Smile
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.