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

Zahlenwerte in .src Datei ersetzen

 

AaronK

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2016, 17:50     Titel: Zahlenwerte in .src Datei ersetzen
  Antworten mit Zitat      
Hallo Zusammen

Eigentlich bin ich kein Matlab-Anfänger mehr, meine momentane Problemstellung geht jedoch ein bisschen über meine Skills:
Ich habe eine Textdatei TEXT.src, welche ungefähr folgendermassen aussieht:

&ACCESS RVP
&REL 96
&COMMENT generated by taimober
...
...
; $base={ x 0, y 0, z 0, a 0, b 0, c 0 }

;Positionierung Linearachse
PTP {E1 -380}

;Ausgangslage
PTP{A1 0, A2 -90, A3 90, A4 0, A5 -90, A6 90}
PTP{A1 15.25, A2 -44.39, A3 112.08, A4 -163.58, A5 68.52, A6 263.85}
...
...

Ich möchte nun anhand dieser Datei ein neues File erstellen, das im wesentlichen eine Kopie ist, jedoch die A1 - A6 Werte (PTP{A1 ...} neu berechnet und einfügt.
Für die Berechnung der neuen Werte steht die Funktion Berechnung.m zur Verfügung, welches für 6 Eingabewerte [A1,A2...A6] die neuen Werte [A1n,A2n,... A6n] berechnet.

Mein Problem ist, dass dies wohl neue Matlab-Funktionen benötigt, von denen ich nicht mal weiss dass sie existieren, noch wie sie heissen Smile

Lönnte mir jemand auf die Sprünge helfen, wie ich hier grundsätzlich vorzugehen habe? Ich verlange auch keinen kompletten Code, sondern nur eine Richtlinie sozusagen!

Ich hoffe ich habe mein Problem anschaulich erklärt und danke euch für eure Hilfe!

Gruss Aaron


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.06.2016, 21:17     Titel:
  Antworten mit Zitat      
Hallo,

fopen : zu lesende und zu schreibende Datei öffnen

Code:

fgetl eine Zeile einlesen
strfind , strcmp , strncmp : nach String suchen
textscan Verarbeiten der Zeile
strrep - ersetzen von Teilstrings
fprintf - Schreiben der geänderten Zeile

Genauere Hilfestellung kann man geben, wenn du sagst, wo du genau hängst.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2016, 23:25     Titel:
  Antworten mit Zitat      
Danke dir Harald, mit deinem Input hat schon sehr viel geklappt Smile
jetzt scheitert es nur noch beim letzten Befehl (fprintf)

Code:

source='Testfile';
source_end='.txt';
copyfile(strcat(source,source_end),strcat(source,'_kopie',source_end));


fid=fopen('Testfile_kopie.txt','r+');
while ~feof(fid)
line = fgetl(fid);
%disp(line)
if strncmp('PTP{A',line,5) == 1
    a=regexp(line,' [ -]?\d*\.?\d*\w','match');
    q0(1)=str2num(a{1});
    q0(2)=str2num(a{3});
...
...
...
   q1=rtraf_6_gelenk(komp,2,sophie); %Die neu berechneten Parameter A1-A6
   newline=strrep(line,a{1},num2str(q1(1)));
   newline=strrep(line,a{3},num2str(q1(2)));
   newline=strrep(line,a{5},num2str(q1(3)));
   newline=strrep(line,a{7},num2str(q1(4)));
   newline=strrep(line,a{9},num2str(q1(5)));
   newline=strrep(line,a{11},num2str(q1(6)));
   disp('******')
   disp(line)
   disp(newline)
   disp('******')
  % fprintf(fid,'%s',newline);
else
  %fprintf(fid,'%s',line);
end

 
end
fclose('all')
 


die beiden disp-Befehle sind nur zum anzeigen, was das Programm macht, und die neuen Zeilen sehen eigentlich schon mal gut aus.:

******
PTP{A1 0, A2 -90, A3 90, A4 0, A5 -90, A6 90}
PTP{A1 0, A2 -90, A389.9946, A4 0, A5 -90, A689.9946}
******

folgende Probleme habe ich nun noch:
1. bildet es mir zum Teil Werte wie oben: A389.9946, anstelle von A3 89.9946, dh. der Leerschlag fehlt ab und zu..?
und 2. wenn ich die fprintf-Befehle wieder aktiviere, dann passiert zwar irgendetwas im Hintergrund, aber es schreibt mir die neuen Zahlenwerte nicht rein, dh. das File ist immernoch die exakte Kopie, welche ich in den ersten Zeilen erstelle. Aber wenn ich die Dateien löschen will, kommt die Fehlermeldung sie sei immernoch in Matlab geöffnet..
Vielleicht raff ichs dann Morgen Wink
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.06.2016, 23:42     Titel:
  Antworten mit Zitat      
Hallo,

ich würde die Originaldatei zum Lesen und die Kopie zum Schreiben öffnen (fopen mit 'w').

Bei num2str kannst du auch die Feldbreite einstellen, vielleicht hilft das.
Alternativ kannst du die Zeile neu zusammenbauen statt zu ersetzen.

Was kommt denn beim regexp-Befehl heraus? Wäre das mit textscan nicht evtl. leichter?

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