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

Wertezuweiseung und Abfrage einzelner Zellen in Tabelle

 

Cope
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 28.05.2014, 17:43     Titel: Wertezuweiseung und Abfrage einzelner Zellen in Tabelle
  Antworten mit Zitat      
Hallo zusammen,
ich habe mehrere ASCII-Dateien wie die im Anhang. Nun hätte ich gerne eine GUI, die erkennt wie viele dieser ASCII Dateien in einem Ordner sind.

Das bekomme ich ja über:

Code:
Pfad = uigetdir;
liste = dir(fullfile(Pfad, '*.txt'));
Dateinamen = {liste.name}';


hin. Nun möchte ich gerne, dass diese Dateinamen in der ersten Spalte einer 3-Spaltigen Tabelle in meiner GUI dargestellt werden. In der zweiten Spalte sollte dann der letzte Wert der 1. Spalte aus der jeweiligen Datei angezeigt werden. (Es handelt sich hierbei um die Laufzeit)

In der 3. Spalte würde ich jetzt gerne einen Bereich eingeben. Wie bspw. 1.5-3.4 und diesem dann einer Variable Zuweisen.

Ein Beispiel für die im Anhang befindliche Datei wäre:

Name--------Zeit--------Zeitbereich
max03zusu---63.193------0.0827 - 0.9993

Ist so etwas Möglich?
Gruß Cope

max03zusu.txt
 Beschreibung:

Download
 Dateiname:  max03zusu.txt
 Dateigröße:  858.07 KB
 Heruntergeladen:  830 mal
Private Nachricht senden Benutzer-Profile anzeigen


draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 19.06.2014, 11:36     Titel:
  Antworten mit Zitat      
Hallo,

das ist natürlich möglich (wie fast alles in Matlab möglich ist Laughing ).

Die Dateinamen hast Du ja schon.

Du musst jetzt eine Matrix (am besten im cell Format) aufbauen in der die anderen Deiner Angaben ebenfalls enthalten sind.

Also 1: Auslesen der Textdateien mittels
Code:
oder
Code:
etc. und Bestimmen des letzten Eintrages des Zeitvektors. Am besten in einer for-Schleife für alle Dateien, sinngemäß:

Code:


for i=1:length(Dateinamen)

filepath_=fullfile(Pfad,Dateinamen{i});%Dateipfad festlegen
        Data(i)=importdata(filepath_,'\t',1);%Importiert die Daten in einem struct namens Data mit fields: data, colheader and textdata

Laufzeit{i}=Data(i).data(end,1);%Liest letzten Wert der 1. Spalte aus.

end

 


Damit kann man dann die uitable füttern.

Code:

set(handles.table,'Columnname',{'Dateiname','Laufzeit','Von','Bis'},'data',...
[Dateinamen Laufzeit num2cell(zeros(length(Laufzeit),2))], ...
'Columneditable',[true true true true],'Columnwidth',{70 60 60 60});
 


Ich habe hierbei Deinen Bereich in zwei Spalten aufgeteilt, da man den Anfang und das Ende direkt separat auslesen kann:

Code:

Daten=get(handles.table,'data');

Anfang=Daten{:,3};

Ende=Daten{:,4};
 



Ich hoffe das hilft.

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 19.06.2014, 20:20     Titel:
  Antworten mit Zitat      
Hallo draussen...
ehm, ich bin wirklich sprachlos. Tausend Dank für deine Hilfe.

Habe noch kleine Fehler gefunden:

Beim importieren der der Daten mit importdata muss hinter dem delimiter noch eine 5 anstelle der 1, da es sich bei der txt-Datei um 5 Zeilen über der den Daten handelt.

Code:
Data(i)=importdata(filepath_,'\t',5);



Vor dem Einfügen der Laufzeit in die Tabelle muss diese noch transponiert werden :

Code:
Laufzeit = Laufzeit';
set(handles.table,'Columnname',{'Dateiname','Laufzeit','Von','Bis'},'data',[handles.Dateinamen Laufzeit num2cell(zeros(length(Laufzeit),2))], 'Columneditable',[true true true true],'Columnwidth',{70 60 60 60});



Noch einmal vielen Dank und beste Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 20.06.2014, 07:11     Titel:
  Antworten mit Zitat      
Hallo,

sorry für die Fehler. Hatte das im Detail nicht mit Deinem File ausprobiert Embarassed .

So lange das Prinzip funzt geht es ja Wink .

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 25.06.2014, 01:43     Titel:
  Antworten mit Zitat      
Hey,
zwei Fragen sind mir noch aufgekommen.

Warum findet hier keine Formatzuweisung 'ColumnFormat' statt?


Code:
set(handles.table,'Columnname',{'Dateiname','Laufzeit','Von','Bis'},'data',[handles.Dateinamen Laufzeit num2cell(zeros(length(Laufzeit),2))], 'Columneditable',[true true true true],'Columnwidth',{70 60 60 60});


Die benötige ich doch um eine Checkboxabfrage durchzuführen, oder nicht? Also ich möchte jetzt gerne noch eine zusätzliche Spalte mit einer Checkbox einfügen mit der ich nur bestimmte Zeilen auswählen kann. Dabei habe ich versucht mich in etwa an diese Anleitung zu halten:

http://www.mathworks.de/de/help/matlab/ref/uitable.html

Code:
set(handles.table, 'Columnname',{'Messung', 'Laufzeit','Auswahl', 'Von', 'Bis'}, 'data', [strrep(handles.Dateinamen_Spalten,'.txt','') handles.Laufzeit false num2cell(zeros(length(handles.Laufzeit),2))], 'Columneditable', [true true true true true],'Columnformat',{'numeric', 'numeric', 'logical', 'numeric', 'numeric'}, 'Columnwidth', {70 60 60 60});


Doch leider bekomme ich folgende Fehlermeldung:

Dimensions of matrices being concatenated are not consistent.

Was mache ich falsch?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 25.06.2014, 20:58     Titel:
  Antworten mit Zitat      
Hallo,

die Sache ist recht einfach.

nur ein "false" ist in Deinem Fall zu wenig.

Da muss ein cell array mit entsprechend vielen 'true' oder 'false' einträgen rein.

Also ersetze 'false' durch
Code:
repmat({'false'},length(Laufzeit),1)


So wird ein Schuh draus.

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 25.06.2014, 21:02     Titel:
  Antworten mit Zitat      
Hallo,

nur noch zur Ergänzung. Ich habe überprüft, dass ein logischer Vektor mit 0 und 1 Einträgen nicht zum Ziel führt. Auch
Code:
,
Code:
oder
Code:
funktioniert hier nicht.


Zumindest nicht in Matlab 2010b (die hab ich).

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 25.06.2014, 22:03     Titel:
  Antworten mit Zitat      
Hey draussen,
ich danke dir.

Zitat:
nur noch zur Ergänzung. Ich habe überprüft, dass ein logischer Vektor mit 0 und 1 Einträgen nicht zum Ziel führt.


Entschuldige die blöde Frage, aber was genau meinst du damit? Soll das bedeuten, dass ich mir den Value-Wert nicht zurück holen kann?

Besten Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 26.06.2014, 19:17     Titel:
  Antworten mit Zitat      
Hallo,

damit meine ich, dass man offensichtlich tatsächlich ein cell-array mit 'true' oder 'false' Einträgen verwenden muss. Das habe ich zumindest beim testen heraus gefunden. Es wäre ja auch schön, wenn man einfach einen Vektor aus Nullen und Einsen verwenden könnte.
Auch die Befehle
Code:
liefern nur Nullen und Einsen.

Wenn Du die Daten ausliest erhälst Du auch 'false' und 'true' Einträge. Hierbei ist die Konsistenz also gewahrt.

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 01.07.2014, 14:59     Titel:
  Antworten mit Zitat      
Hallo draussen,
könntest du mir bitte einmal weiterhelfen?

Die Checkbox konnte ich dank deiner Hilfe einfügen.
Das sieht jetzt so aus:

Code:
set(handles.table, 'Columnname',{'Messung', 'Laufzeit','Auswahl', 'Von', 'Bis'}, 'data', [strrep(handles.Dateinamen_Spalten,'.txt','') handles.Laufzeit repmat({'false'},length(handles.Laufzeit),1)  num2cell(zeros(length(handles.Laufzeit),2))], 'Columneditable', [true true true true true],'Columnformat',{'numeric', 'numeric', 'logical', 'numeric', 'numeric'}, 'Columnwidth', {70 60 60 60});


Die Daten hole ich mir jetzt mit:

Code:
get(handles.table,'data')


Das funktioniert auch. Für eine nicht ausgewählte Checkbox bekomme ich ein 'false' zurück.

Aber sobald ich diese Checkbox anklicken (auswählen) möchte, tut sich nichts und ich bekomme folgende Meldung ins Command Window:

Warning: Cannot convert logical edit to char matrix.

Hast du eine Ahnung wo der Fehler liegt?
Vielen Dank und beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 01.07.2014, 15:21     Titel:
  Antworten mit Zitat      
Ich habe den Fehler entdeckt.

Das Problem lag am 'false'
Code:
repmat({'false'},length(handles.Laufzeit),1)


'false' einfach durch ein false ersetzen und es funktioniert.
Code:
repmat({false},length(handles.Laufzeit),1)
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 01.07.2014, 18:51     Titel:
  Antworten mit Zitat      
Hallo,

dann hat sich das ja erledigt... Laughing

MfG

Georg
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.