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

Indexing und Dateien einlesen

 

zyklon
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2011, 22:04     Titel: Indexing und Dateien einlesen
  Antworten mit Zitat      
Ich möchte Messwerte aus *.txt einlesen und in einer Matrix speichern

Code:

function test = testi
list=dir('*LMO*');
for i=length (list)
x(i)=dlmread([list(1).name],'\t',3)
x=[x x(i)]

end
 


so funktioniert das aber irgendwie nicht - was mache ich falsch
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.05.2011, 22:43     Titel: Re: Indexing und Dateien einlesen
  Antworten mit Zitat      
Hallo zyklon,

"so funktioniert das aber irgendwie nicht" - das ist nicht hilfreich. Bitte schreibe, was genau nicht so funktioniert, wie Du es Dir vorgestellt hast. Es ist immer viel leichter ein Problem zu lösen, als heraus zu finden, was überhaupt das Problem ist.

1. Du liest immer aus dem File "[list(1).name]" ein - wahrscheinlich meinst Du "list(i).name".
2. Du setzt einerseits "x(i)", dann hängst Du aber zusätzlich x(i) nochmal an x an.
3. Ist den die Ausgabe von DLMREAD ein Skalar?
4. "for i=length(list)" ist eine Schleife über ein einziges Element. Vermutlich meinst Du "for i = 1:length(list)".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zyklon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2011, 22:59     Titel:
  Antworten mit Zitat      
Ok, tut mir leid , das war sehr unpräzise formuliert.

Code:


function test = testi
list=dir('*LMO*');
ergebnis=0
for i=1:length (list)
x=dlmread([list(i).name],'\t',3)
ergebnis=[ergebnis x]

end


[



Dann kommt der Fehler

??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the
same number of rows.

Die Dateien haben aber die selbe Länge und Dimension

Ich möchte einfach nur alle eingelesenen Dateien, die jeweils 2 spalten haben in eine große Matrix schreiben

Was mich auch sehr interessieren würde. Wie kann ich jede eingelesene Datei in eine eigene Matrix schreiben, ohne diese bei jedem Durchlauf zu löschen.

LG

Edit:
Ok, anscheinend schwankt die Länge der Dateien um 3-4 Zeilen -warum auch immer. Könnte ich nicht einfach jede eingelesene Datei in eine eigene Matrix schreiben, deren Namen z.B Datei1 Datei2 Datei 3 usw ist
Am besten wäre natürlich die MAtrix heißt so wie die eingelesene Datei :
QMO-60-06-50.dat; QMO-60-25-40.dat

LG Zyklon
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2011, 12:15     Titel:
  Antworten mit Zitat      
Hallo zyklon,

Einen Haufen von Variablen zu produzieren, deren Namen einen Index beinhalten, ist eine schlechte Idee. Lies dazu einfach die 500 Threads, die ich zu EVAL, EVALIN und ASSIGNIN geschrieben habe...

Viel besser ist es, einen Index als Index zu verwenden!
Code:

function test = testi
list = dir('*LMO*');
Data = cell(1, length(list));
for i = 1:length(list)
 x = dlmread(list(i).name, '\t', 3);
 Data{i}.x = dlmread(list(i).name, '\t', 3);
 Data{i}.name = list(i).name;
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zyklon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2011, 11:00     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

Code:

function test = testi
list = dir('*LMO*');
Data = cell(1, length(list));
for i = 1:length(list)
 x = dlmread(list(i).name, '\t', 3);
 Data{i}.x = dlmread(list(i).name, '\t', 3);
 Data{i}.name = list(i).name;
end

Gruß, Jan


Hallo Jan,

Damit ich das richtig verstehe...
.....du liest die die menge der dateien im ordner ein
..... dann bildest du ein cell array "Data" in der größe der anzahl der dateien
.......... der reihe nach die dateien ein in vektor x

aber dann liest du sie noch einmal ein in
Code:

 Data{i}.x = dlmread(list(i).name, '\t', 3);
 
????
Danach vergibst du den dem Data array den Namen der Datei.

Ist das ein schreibfehler das du 2 mal einliest. Das einlesen eines meiner Dateien dauert 5 minuten (350 mb). Schleifen länger als 5 Daten bringen meinen Rechner ins stottern und MAtlab zeigt mir nen Fehler an.
Ich habe zwischenzeitlich mir mit eval beholfen, Allerdings ist deine Lösung sicherlich eleganter - Ich werde es jetzt so versuchen.

Mein Problem ist aber vielmehr die Ausgabe der Daten. Teilweise rechne ich Mittelwerte aus, die ich in Excel verwende. mit

z.B.
Code:
dlmwrite([[list4.name]  '_Mittelwertx.txt'],'\t',mittelwertx)

 


Habe ich mir verschiedene Mittelwerte und Prozessgrößen ausgeben lassen, die in der schleife produziert worden sind.
Ich habe diese - nicht auslachen - bisher mit der Hand dann geöffnet und in Excel reinkopiert, dann den Dateinamen angeklickt und diesen in eine Nachbar-spalte händisch eingefügt. Ich habe leider auf dem Computer mit Matlab kein Office. Bisher funktionierte dies auch ganz gut

dlmwrite konnte mir auch Graphen ausgeben, die TECPLOT verstanden hat.

Gestern habe ich aber für jede meiner 16 Hauptdateien 18 Mittelwerte berechnen müssen - Ich saß dann fast 2 h am kopieren in Excel.

Kennst du eine Möglichkeit, wie ich ohne die Übersicht zu verlieren welcher Wert zu welcher Auswertung gehört, direkt in Excel zu schreiben.

Aktuell habe ich folgende Aufgabe:

16 Dateien

Eta-ges*.dat

einlesen wie gehabt und mit einer Schleife auswerten.

bisher habe ich dann nach jedem der 18 zwischenergebnise

Code:
dlmwrite([[list4.name]  '_zwischenergebnis1.txt'],'\t',zwischenergebnis1)

 


eingeführt.

Wie kann ich dein Cell Array in Excel darstellen z.B. in 3 Spalten

Datei Auswertungsmethode Wert
Eta-ges.... z.B.: QMO Mittelung 0,000815

Eta-ges.... Schwarzwertmittelung 0,2546


usw.


Ich hoffe du oder jemand anderes kann mir zu diesem Thema tipps geben. Gestern bin ich fast verzweifelt und die Tipps zu Schreiben in Excel die ich finde, kann ich nicht auf mein PRojekt anwenden bzw verstehe ich nicht.

Bin leider Matlab Neuling


Mit bestem Dank im Voraus

Florian
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.05.2011, 01:10     Titel:
  Antworten mit Zitat      
Hallo Florian,

Das zweimalige Einlesen war ein Tippfehler!

Kannst Du per XLSWRITE Dateien erzeugen, die Excel direkt einliest?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zyklon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 18.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2011, 11:26     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Florian,

Das zweimalige Einlesen war ein Tippfehler!

Kannst Du per XLSWRITE Dateien erzeugen, die Excel direkt einliest?

Gruß, Jan


Danke Jan, das mit dem Cell Array funktioniert super.

Ich habe bisher nie mit Cell Array gearbeitet und verstehe nicht wie ich bei XLSWRITE ansteuere, dass er mir mein Cell Array DATA.name in die Spalte A1 schreibt , DATA.FKE (ein einzelner Wert) in Spalte B2 und Data.FKEcut in Spalte C.

Ich habe insgesamt 120 Dateien eingelesen - mit jeweils den 3 Lösungswerten.

Hat jemand einen Tipp
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 - 2025 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.