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

char-Inhalt an bestimmter Stelle mittels Vektor trennen

 

Curro

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2015, 02:27     Titel: char-Inhalt an bestimmter Stelle mittels Vektor trennen
  Antworten mit Zitat      
Hallo,
für eine Studienarbeit schreibe ich ein Programm mit dem ich ein Simulationsprogramm über eine Textdatei, in der alle Befehle für alle Parameter stecken, ansteuere.
Die Befehle darin sehen in etwa so aus:
CAB:aeoifnWE=23
WEF::eof=2
WP::sdfsdfsefe=93.1234
usw....

Diese Befehle werden in dasCell-Array "Daten" 576x2 übergeben.

Um die Parameter-Werte zu ändern habe ich eine Funktion geschrieben:
Old_Parameter ist ein char-Vektor der zu änderende obige Befehle enthält.
Als Input erhält die Funktion verschiedene Vektoren (um mehrere Parameter auf einmal zu ändern). Der Vektor "Number_of_Signs" enthält dabei die Anzahl der Zeichen der Befehle bis zum "=" des Befehls. also z.b. [15;19;22]

Mit folgendem Code
Code:
%
Old_Parameter(:,1)=Old_Parameter(:,(1:Number_of_Signs(:,1)));
 

wollte ich die Befehle aus dem Datensatz ohne den alten Parameter-Wert abgreifen, damit ich zB. nur noch "CAB:aeoifnWE=" hab.

Mein Problem ist, dass aus "Number_of_Signs" immer nur das erste Element genommen wird, sodass die restlichen Befehle vor oder nach dem "=" abgeschnitten werden.

Hab alles mögliche versucht... nicht mal mit einer for-Schleife bekomme ich es hin... Ich würde mich sehr freuen wenn mir jemand mit einer Idee weiterhelfen kann.


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.12.2015, 10:54     Titel:
  Antworten mit Zitat      
Zitat:
Diese Befehle werden in dasCell-Array "Daten" 576x2 übergeben.

für mich sieht das so aus als hättest du doch dann schon string und zahl getrennt.
ich kann dem ganzen hier noch nicht folgen.
Code:
Old_Parameter(:,1)=Old_Parameter(:,(1:Number_of_Signs(:,1)));

das sieht dimmensionsmäßig irgendwie sehr komisch aus.
kannst du mal ein lauffähiges minimalbeispiel posten das dein problem verdeutlicht. was du erreichen willst etc.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Curro

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2015, 12:59     Titel:
  Antworten mit Zitat      
Sry für die Verwirrung. Hab mich vertan ist ein 576x1 cell-Array, das vorher schon von den Zahlen zu trennen, könnte ich auch mal versuchen. Probier ich mal;)

Hier nochmal verständlicher.
Was ich habe ist (Input der Funktion):
Code:
Daten={'CRegion::m_TauP=534'
       'CRegion::m_BulkEt=0'
       'CRegion::m_FrontSn=1e+006'
       'CRegion::m_FrontSn=1e+006'};                     %in echt viel mehr..
Daten=[Daten{:}];

Line=[1;2;3]; Number_of_Signs=[16;18;19]; New_Parameter=[33;44;555];

Es sollen also 3 Parameter geändert werden.

Was ich möchte: Die zu ändernden Befehle (Line) nach dem = abzuschneiden, damit ich den neuen Parameter dranhängen kann.

Meine Funktion:
Code:
New_Parameter_str=num2str(New_Parameter);
Old_Parameter=char(Daten(Line));
Old_Parameter(:,1)=Old_Parameter(:,(1:Number_of_Signs(:,1)));
Daten(Line)= cellstr(strcat([Old_Parameter, New_Parameter_str]));


Hab alles was mir einfiel probiert, läuft aber nicht.. Wenn klappt es nur, dass nur das erste Element aus Number_of_Signs benutzt wird und dann alle nachkommenden Befehle an der falschen Stelle abgeschnitten werden.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.12.2015, 13:13     Titel:
  Antworten mit Zitat      
das siht alles unnötig kompliziert aus. warum liest du die text datei nicht gleich getrennt ein mit = als delimiter ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Curro

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2015, 14:06     Titel:
  Antworten mit Zitat      
Eine kleine Frage dafür; gibt es eine Möglichkeit das Trennungszeichen "=" dann zu behalten? Weil wenn ich es nachträglich ans Ende jeder Zelle der ersten Spalte einfüge, hab ich ein Problem, da nicht in jeder Zeile ein "=" ist und es dann an vielen Stellen zu einer Fehlermeldung führen würde.

Habs nämlich jetzt so:
Code:

Daten=textscan(fileID,'%s%s', 'Delimiter', '=');
fclose(fileID);
Daten=[Daten{:}];
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.12.2015, 15:03     Titel:
  Antworten mit Zitat      
das nicht jede zeile ein = zeichen enthällt war aus deinen beispiel daten nicht zu entnehmen. wenn das ganze nicht einheitlich ist, ist es natürlich schwerer zu verarbeiten.
Code:
Daten1={'CRegion::m_TauP=534'
       'CRegion::m_BulkEt=0'
       'CRegion::m_FrontSn=1e+006'
       'CRegion::m_FrontSn=1e+006'};                     %in echt viel mehr..

l=[1;2;3];
New_Parameter=[33;44;555];
for k=1:numel(l)
    index=strfind(Daten1{l(k)},'=');
    Daten1{l(k)}=strrep(Daten1{l(k)},Daten1{l(k)}(index+1:end),num2str(New_Parameter(l(k))));
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Curro

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 11:15     Titel:
  Antworten mit Zitat      
Damit hab ich es hingekriegt!! Danke dir, jetzt läuft das Programm Cool Cool
 
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.