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

cell Inhalt ohne Schleife Kürzen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 10:49     Titel: cell Inhalt ohne Schleife Kürzen
  Antworten mit Zitat      
Hi,

ich möchte in einem cell Array den Inhalt kürzen (die letzten vier Buchstaben wegfallen lassen).

Mit
Code:
UR2=UR1{1}(1:end-4)


geht das für eine einzelne Zeile des Arrays aber ich möchte nur ungern eine Schleife einbauen um das für alle Zeilen zu machen und

Code:
UR2=UR1(1:end-4)


entfernt mir nur die letzten vier Zeilen aus UR1. Crying or Very sad Crying or Very sad


MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 11:12     Titel:
  Antworten mit Zitat      
Hi,

hier erst mal der doofe Schleifen Ansatz:

Code:
for j=1:length(UR1)
    UR1{j}=UR1{j}(1:end-5);
    UR2{j}=UR1{j}(end-3:end); %#ok<SAGROW>
end


Bei UR1 handelt es sich um Dateinamen Listen und da tritt der Fehler auf das ich mit UR2 so nicht die Endungen sondern die letzten Buchstaben vor dem Punkt bekomme.
Wenn ich das in der Kommandozele mit
Code:
 UR2{1}=UR1{j}(end-3:end)
mache tritt der Fehler nicht auf. Dann bekomme ich den Punkt und die Endung.

Hat jemand eine Ahnung woran das liegt???

Wird es vielleicht einfacher wenn ich ein anderes Datenformat wähle? char?? oder so Confused Confused Confused

MfG Thomas

Zuletzt bearbeitet von Thomas_74 am 16.07.2014, 11:29, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.07.2014, 11:28     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube, man wird nicht um eine Schleife herumkommen. Entweder so, wie du das gemacht hast oder mit cellfun()
Code:
% Data
UR1 = cell(1,3);
UR1{1} = 'test.dat';
UR1{2} = 'jauklar.dat';
UR1{3} = 'banane.zip';

% schleife
UR2 = UR1;
for i = 1:length(UR2);
    UR2{i} = UR2{i}(1:end-4);
end

% cellfun
f = @(x) x(1:end-4);
UR3 = cellfun(f, UR1, 'uniformoutput', false)


Was nun schöner/schneller/besser ist, müsstest du selbst herausfinden. Oft gilt aber: wenn man das nur ein mal machen muss, dann ist der Weg mit der Schleife, den man sehr schnell geschrieben hat, einfach der beste. Ansonsten verbringt man viel Zeit mit überlegen. Selbst wenn man dann etwas herausfindet, das scheller ist, lohnt sich das oft nicht, weil man eben so viel Zeit in das Überlegen investiert hat.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 11:45     Titel:
  Antworten mit Zitat      
Hi Danke hab jetzt die Schleifenlösung hin gekriegt.

Hab UR1 erst verändert und dann UR2 gezogen das wahr wohl doof und konnte nicht klappen.

Allerdings finde ich es doof erst eine Schleife einzusetzen um die Dateinamen auseinanderzupropeln und es dann einfach mit

Code:
zu vervielfältigen und mit
Code:
aneinander zu hängen.

Und ja die Schleifenlösung ist die mit dem wenigsten Hirnschmalz aber ich fänd es Cool sie zu umgehen und noch was zu lernen.

Vielen Dank Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2014, 12:02     Titel:
  Antworten mit Zitat      
Hi hab jetzt auch die cellfun Lösung hingekriegt.
Kann es sein das die langsamer ist als die Schleife oder muss ich das mit größeren Listen probieren? Embarassed Embarassed

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.07.2014, 17:06     Titel:
  Antworten mit Zitat      
Hallo,

das kann sein, dass das langsamer ist. Es ist bequemer zu schreiben Wink.
Dazu findet man einige Infos zum Beispiel hier: http://stackoverflow.com/questions/.....t-loop-in-matlab-why?rq=1

Also wenn du performance-Probleme hast, könntest du in einem ersten Schritt die anonyme Funktion durch den direkten code ersetzen und und und...
Code:
UR3 = cellfun(@(x) x(1:end-4), UR1, 'uniformoutput', false);


Viele Grüße,
Nras.
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.