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

wie erstelle ich ein laufindex Index

 

shersei
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 13:19     Titel: wie erstelle ich ein laufindex Index
  Antworten mit Zitat      
hi wollte ma fragen ob ihr mir sagen könnt wie man
ein laufindex erzeugt
für folgenden fall :

dateninhalt{1}=1 2 3 4 5 67 8 9.....
dateninhalt{2}=67 67 5675 67 67567 ...


for i=1:1:10
signal"i"=eval(dateninhalt{"i"})
end;
damit am ende
für signal1 = 1 2 3 4 5 6 7 8 9 9...
Private Nachricht senden Benutzer-Profile anzeigen


Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.07.2010, 13:39     Titel:
  Antworten mit Zitat      
Hi,

so könnte es gehen:

Code:

dateninhalt{1}=[1 2 3 4 5 67 8 9];
dateninhalt{2}=[67 67 5675 67 67567];
for i=1:1:2
 eval(['signal' num2str(i) ' = dateninhalt{i}'])
end;
 


aber gleich kommt jemand heisst Jan S und macht dich fertig wegen
EVAL Wink Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
shersei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 13:49     Titel:
  Antworten mit Zitat      
haha wieso ?
was hat er dagegen der tut ihm doch nix Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.07.2010, 13:57     Titel:
  Antworten mit Zitat      
The EVAL function is one of the most powerful, flexible, and potentially dangerous functions in MATLAB.

der tut ihm nichts, aber er macht sich um dich und dein Programm sorgen Wink

hat's zumindest funktioniert?
Private Nachricht senden Benutzer-Profile anzeigen
 
shersei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:04     Titel:
  Antworten mit Zitat      
hat geklappt
nur eval hinzufügen Sad
jetzt aber werden mir die ganzen daten im command window angezeigt
wie kann ich das unter drücken ??


Code:
dateninhalt{1}=[1 2 3 4 5 67 8 9];
dateninhalt{2}=[67 67 5675 67 67567];
for i=1:1:2
 eval(['signal' num2str(i) ' = eval(dateninhalt{i})'])
end;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:07     Titel:
  Antworten mit Zitat      
Semicolon .

Code:

 eval(['signal' num2str(i) ' = eval(dateninhalt{i});'])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
shersei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:15     Titel:
  Antworten mit Zitat      
ne geht immer noch net
Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:20     Titel:
  Antworten mit Zitat      
warum hast du übrigens 2 evals: :
Code:

eval(['signal' num2str(i) ' = eval(dateninhalt{i})'])
 


Jan wird durchdrehen.

ich hab so gemeint:

Code:

eval(['signal' num2str(i) ' = dateninhalt{i};'])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
shersei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:33     Titel:
  Antworten mit Zitat      
Code:

clearall; clc;
daten=input('Dateiname:','s');
fid=fopen(sprintf('%s ',daten),'rt');
header=fgetl(fid); % Erst nur die Header holen
signalnamen = strread(header, '%s', 'delimiter', ' \t');
laenge=length(signalnamen);
data=textscan(fid,['%*s %*s'repmat(' %f',1,laenge) ' ']); % Datum und Zeit ignorieren,  Spalten mit Zahlen holen
fclose(fid);
header=regexp(header,'\t','split'); % Header an den Tabs trennen
header(cellfun(@isempty,header)) = []; % Leere Header (1. Spalte) entfernen
% Create new variables in the base workspace from those fields.
for i=1:length(header)
    assignin('base', header{i}, data{i});
end
lines=numel(data{1});
tage=(lines/1440);
tag_ab=floor(tage);
for i=1:1:length(header)
 eval(['signal' num2str(i) ' = eval(header{i});'])
end;
 


test.txt
 Beschreibung:

Download
 Dateiname:  test.txt
 Dateigröße:  5.77 KB
 Heruntergeladen:  357 mal
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: 30.07.2010, 12:17     Titel:
  Antworten mit Zitat      
Hallo Napoleon,

Zitat:

Code:
eval(['signal' num2str(i) ' = eval(dateninhalt{i})'])

Jan wird durchdrehen.

Nicht durchdrehen, aber verzweifeln.

Matlab hat seit vielen Jahren den Type CELL um effizient Arrays verschiedener Größe und Typs in einem Container zu organisieren. Wenn Du das stattdessen Deinen Workspace mit dynamisch erzeugten Variablen blockieren möchtest, kannst Du das gerne machen. Allerdings bremst das Matlab sehr aus, weil die LIste der Variablen-Namen, die intern ja verwaltet werden muss, dauernd wächst. Ausserdem muss Matlab ja dann auch bei jedem Zugriff auf eine Variable oder Funktion länger in den Symbol-Tabellen suchen.

EVAL, ASSIGNIN, EVALIN ist also langsamer, schwerer zu debuggen und weil es unerwartet Funktionsnamen überschreiben kann führt es zu gräßlich komplizierten Debug-Parties. Wenn man das alles gerne in seinem Programm haben möchte, sollte man auf diese Befehle auf keinen Fall verzichten. Zwei EVAL-Aufrufe zu schachteln ist dann natürlich das Sahne-Häubchen.

Es ist wie in jeder Sprache: Man kann das, was man machen möchte, natürlich auf verschiede Arten ausdrücken tun. Manches tut das Ergebnis schöner und effizienter machen, aber tun kann man es tun, wie man es tun machen möchte.

Das ist kein Grund durchzudrehen, aber natürlich auch kein Grund, jemanden mit solchen Programmierstil später mal als Diplomand, Doktorand oder Programmierer anzustellen.

Code:
disp(evalc('fprintf(''Viele Grüße, Jan'')'))
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 30.07.2010, 12:26     Titel:
  Antworten mit Zitat      
Moin,

ich bin irgendwie so angelernt worden, dass ich möglichst immer alles haarklein definiert haben möchte, schon deswegen ist mir eval & Co suspekt. Ich denke aber, dass hier wohl noch ein zweites Semikolon fehlt: das am Ende...

Code:

eval(['signal' num2str(i) ' = dateninhalt{i};']);
 


Ciao,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
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: 30.07.2010, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

shersei hat Folgendes geschrieben:
Code:

header(cellfun(@isempty,header)) = [];
 


Anmerkung: CELLFUN ist deutlich schneller mit den internen Kommandos, die per String aufgerufen werden:
Code:

header(cellfun('isempty', header)) = [];
 

Dabei wird die Bedingung innerhalb von CELLFUN getestet, statt für jedes einzelne CELL-Element die Funktion ISEMPTY aufzurufen.
Weitere Befehle mit dieser Warp-Geschwindigkeit in CELLFUN:
isreal, islogical, length, ndims, prodofsize (heutzutage heisst das NUMEL...), size, isclass.

Gruß, Jan
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: 30.07.2010, 12:40     Titel:
  Antworten mit Zitat      
Hallo,

und noch mal:
shersei hat Folgendes geschrieben:
Code:

for i=1:length(header)
    assignin('base', header{i}, data{i});
end
for i=1:1:length(header)
 eval(['signal' num2str(i) ' = eval(header{i});'])
end;
 

Was spräche denn dagen, "signal" als struct per Output zurückzugeben und die "header{i}" als Feldnamen zu verwenden?
Das wäre allemal sicherer und sogar effizienter. Man könnte die Funktion dann auch problemlos nochmal als Unterfunktion für andere Programme verwenden.

Gruß, Jan
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.