Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Automatisierungstechnik

Fachkräfte:
SW-Entwickler/in
Entwicklung mit Matlab/Simulink und der Programmiersprache "C"
Robert Bosch GmbH - Schwieberdingen

Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Systemingenieur (m/w) Funktionsentwicklung Automotive
Konzeption und Spezifikation von spezifischen Funktionen (Mess- und Regelalgorithmen) in elektronischen Steuergeräten
DRÄXLMAIER Group - Vilsbiburg bei Landshut

Ingenieurin/Ingenieur Elektronik / Sonsortechnik / Datenauswertung
Technische Begleitung wissenschaftlicher Projekte in der Optronik
Fraunhofer-Institut für Optronik, Systemtechnik und Bildauswertung IOSB - Ettlingen

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datenimport von .txt-Dateien aus Ordnerstruktur

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 25.08.2017, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

die Überschriften kannst du über
Code:
T.Properties.VariableNames = ...

ändern.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 25.08.2017, 16:33     Titel:
  Antworten mit Zitat      
Hallo,

ich möchte das ganze nun für mehrere Dateien wiederholen:
Code:

files=dir('*.txt');
for i=1:1:length(files)
test(i)readtable(files(i).name,...)
end
 

Ich möchte am liebsten, dass er die Tabellen in etwa nach den Dateinamen benennt. Bsp. AEB1.txt --> Tabelle AEB1. Dann weiter macht, bis er alle Dateien aus dem Ordner abgehandelt hat.

Derzeit bekomme ich eine Fehlermeldung:
Zitat:
You cannot subscript a table using linear indexing (one subscript) or multidimensional indexing (three or more subscripts). Use a row subscript and a variable subscript.


Wenn ich das i bei test(i) weglasse, dann speichert er das ja immer unter einer Variablen ab. Ich möchte aber, wie gesagt, mehrere haben.

Hoffe du kannst mir noch einmal kurz vor dem Wochenende behilflich sein Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 26.08.2017, 21:21     Titel:
  Antworten mit Zitat      
Hallo,

du kannst das z.B. als Cell Array abspeichern.
test{i}

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 27.08.2017, 13:27     Titel:
  Antworten mit Zitat      
Hallo,

habe ich auch schon gemacht. Nun habe ich noch ein kleines Problem mit der Darstellung von 'dd.MM.yyyy HH:mm:SS'. Hier der Code. Er zeigt mir dann nur 'dd.MM.yyyy' an. Muss ja an der Format-Zeile liegen:
Code:
files=dir('*txt');
%Data = cell(1, length(files));
for i=1:1:length(files)
    Data{1,i}=readtable(files(i).name,'Delimiter',',','FileType','text','Headerlines',0,'ReadVariableNames',false,'ReadRowNames',false,'Format','%{dd.MM.yyyy}D %{HH:mm:SS}D %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f');
    Data{1,i}{:,1}=Data{1,i}{:,1}+(Data{1,i}{:,2}-datetime('today'));
    Data{i}{:,1}.Format='dd.MM.yyyy HH:mm:SS';
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 28.08.2017, 07:47     Titel:
  Antworten mit Zitat      
Außerdem möchte ich nun einmal den Index der Spalte bzw. der Zeile herausfinden, der einem vorgegebenen Wert am nächsten kommt. Matlab stürzt bei folgendem Code leider immer ab:
Code:
[A index]=min(abs(Data{1}{1,2:end}-2));

Woran liegt das?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 28.08.2017, 08:33     Titel:
  Antworten mit Zitat      
Hallo,

wenn der Code vorher den richtigen Zeitstempel lieferte, dann sollte er das auch jetzt noch tun. Ohne das reproduzieren zu können, ist das für mich schwierig zu sagen.

Was heißt "abstürzen"? Schließt sich wirklich der MATLAB-Prozess (das wäre sehr ungewöhnlich) oder bekommst du eher eine Fehlermeldung? Falls letzteres: welche?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 28.08.2017, 10:54     Titel:
  Antworten mit Zitat      
Bevor ich die Tabellen im Array gespeichert habe, hat der Zeitstempel gepasst. Wenn ich beispielsweise unter
Code:
A=Data{1}{2:end,1}
&
Code:
B=Data{1}{2:end,2}
abspeichere und den Zeitstempel dann anwende, funktioniert es. Allerdings nicht im Array.

Beim anderen Problem öffnet sich ein Fenster, wo ich einen Fehlerbericht senden kann, das Programm schließen kann oder noch 2 weitere Optionen habe. Danach schließt Matlab. Ich kann es genauer morgen nachliefern.

Gruß
Lenhold
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 28.08.2017, 12:19     Titel:
  Antworten mit Zitat      
Der angezeigte TexT:
https://www.google.de/search?q=matl.....uM:&spf=1503915524529[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 28.08.2017, 12:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Beim anderen Problem öffnet sich ein Fenster, wo ich einen Fehlerbericht senden kann, das Programm schließen kann oder noch 2 weitere Optionen habe. Danach schließt Matlab.

Wenn das Problem reproduzierbar ist (d.h. bei Neustart und nochmaliger Ausführung wieder auftritt), dann würde ich damit MathWorks kontaktieren.

Auch zur ersten Frage wäre ein reproduzierbares Beispiel hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 29.08.2017, 08:43     Titel:
  Antworten mit Zitat      
Hier wäre ein Beispieldatei (etwas kürzer), müsste dann in der readtable-Zeile angepasst werden.

Brauchst du noch was neben dem Code und der Beispieldatei?

test.txt
 Beschreibung:

Download
 Dateiname:  test.txt
 Dateigröße:  333 Bytes
 Heruntergeladen:  8 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 29.08.2017, 08:56     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar warum, aber folgende Zeile löst das Format-Problem:
Code:
Data{i}.Var1.Format='dd.MM.yyyy HH:mm:SS';


Wenn ich den Befehl ausführe, der bei dir zum Absturz führt, bekomme ich die verständliche Fehlermeldung:
Zitat:
Cannot concatenate the specified table variables.
Caused by:
Error using datetime/horzcat (line 1278)
All inputs must be datetimes or date/time character vectors or
date/time strings


Wenn ich die 2. Spalte weglasse
Code:
[A index]=min(abs(Data{1}{1,3:end}-2));

läuft der Code durch.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 29.08.2017, 10:34     Titel:
  Antworten mit Zitat      
Harald, du hast Recht!

Antwort von Mathworks:
Zitat:
es handelt sich hierbei um einen Bug, der mit 17a gefixt ist. Also Workaround, können Sie den Aufruf auf zwei Zeilen aufteilen:

tmp = Data{1}{1,3:end}-2;
[A index]=min(abs(tmp));

Bezüglich der Formatierung einer datetime Spalte: Dies wird über die Variable der Table gesteuert und nicht über die eigentliche Werte der Spalte:

Data{i}.Var1.Format = 'dd.MM.yyyy HH:mm:SS';
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 29.08.2017, 11:08     Titel:
  Antworten mit Zitat      
Hallo,

bitte auch hier immer das verwendete Release angeben, insbesondere wenn es nicht das aktuelle ist. Am besten ins Profil eintragen. Manchmal sind Probleme eben spezifisch für ein bestimmtes Release, und dann kann man in einem anderen Release lange versuchen, das nachzustellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lenhold
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 29.08.2017, 11:16     Titel:
  Antworten mit Zitat      
Habe ich ergänzt.

Nun habe ich noch ein Problem und zwar möchte ich das ganze nun automatisieren, damit ich später mehrere Plots aus verschiedenen Tabellen zu bestimmter Auswahl erstellen kann. Bisher habe ich dies:
Code:
for i=1:1:length(files)
    for j=1:1:length(Tiefe)
        tmp = Data{i}{1,2:end}-Tiefe(j);
        [A(j,i) index(j,i)]=min(abs(tmp));
        index(j,i)=index(j,i)+1;
        end
    end

Hier ist nun das Problem, dass nicht alle Tabellen die gleiche Spaltenanzahl haben, sodass "index" nachher immer den letzten Wert annimmt, wenn weniger Spalten zur Verfügung stehen. Ich wollte nun Abhilfe schaffen mit:
Code:
for i=1:1:length(files)
    for j=1:1:length(Tiefe)
        tmp = Data{i}{1,2:size(Data{i},2)}-Tiefe(j);
        [A(j,i) index(j,i)]=min(abs(tmp));
        index(j,i)=index(j,i)+1;
        end
    end


Fehlermeldung:
Zitat:
Function 'subsindex' is not defined for values of class 'table'.

Error in Auswahl (line 2)
Groesse=size(Data{i},2);
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.228
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 29.08.2017, 15:24     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe leider weder das Problem noch den Versuch der Abhilfe.

In dem Fall dürfte tmp ja eine Matrix sein und das Minimum somit ein Zeilenvektor. Ist das beabsichtigt oder nicht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.