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

Teilstring in Textdatei ersetzen

 

Vesuv
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.07.15
Wohnort: Baden-Württemberg
Version: R2016b
     Beitrag Verfasst am: 22.08.2017, 16:48     Titel: Teilstring in Textdatei ersetzen
  Antworten mit Zitat      
Hi Leute,

irgendwie stehe ich gerade völlig aufm Schlauch.
Ich lade ein .c File und möchte dort einen Wert innerhalb einer Zeile ersetzen. Ich weiß nicht wie der aktuelle wert ist, noch wie der neue Wert sein wird.
Allerdings weiß ich was am Anfang der Zeile steht.
Also öffne ich das File, gehe das File zeilenweise durch bis ich dort bin wo ich hin möchte und dann... ja was dann?
Code:

fileID = fopen('text.c');
Insert_Length = funnyfunction();
new_str = ['#define benutzte_Laenge %i' num2str(Insert_Length)]; % einer der kläglichen Versuche
aktuelle_Zeile = fgets(fileID);
% '#define benutzte_Laenge' suchen um Wert zu ändern
while isempty(strfind(aktuelle_Zeile, '#define benutzte_Laenge'))
    aktuelle_Zeile = strtrim(fgets(fileID));
end

%hier ein paar Versuche, die natürlich alle nicht funktioniert haben:
fprintf(fileID, aktuelle_Zeile, new_str);
fprintf(fileID,  '#define benutzte_Laenge %i', new_str);
strrep(fileID, aktuelle_Zeile, '#define benutzte_Laenge %i', Insert_Length);
% und so weiter..
fclose(fileID);
 


Ich habe also in "aktuelle_Zeile" genau das was ich suche, möchte es jetzt ersetzen im Text.c File und das File dann einfach wieder schließen und mich freuen Smile



Beispielhaft:
Ich habe einen C-Code in dem Zeug wie
---
# include irgendeineHeaderdatei.h
# include irgendwelcheanderenDateien.h

#ifndef bla
#define bla

// und so weiter..

#define benutzte_Laenge 123

// und so weiter
---

Jetzt bekomme ich über die funnyfunction einen Wert zurück, z.B. 321. Also möchte ich die c-Datei so verändern, dass da jetzt folgendes drin steht:

---
# include irgendeineHeaderdatei.h
# include irgendwelcheanderenDateien.h

#ifndef bla
#define bla

// und so weiter..

#define benutzte_Laenge 321

// und so weiter
---

Das ganze wird öfter ausgeführt und ich kann zwischendrin nicht nachschauen welche Werte drin stehen oder ich reinschreibe, also muss das "dynamisch" ablaufen.
Ich steh gerade nur, wie gesagt, völlig aufm Schlauch Sad
_________________

never touch a running system!
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: 22.08.2017, 19:18     Titel: Re: Teilstring in Textdatei ersetzen
  Antworten mit Zitat      
Hallo Vesuv,

Es ist ein sicheres Zeichen für ein Fehl-Design, wenn man Source-Code mit solchen automatischen Tools modifizieren muss. Programme, die Programme schreiben sind im Allgmeinen in effizient und schwer zu debuggen. Es wäre viel einfacher, wenn der C-Code den Wert aus deinem Daten-File einlesen würde. Das wäre sogar nahezu trivial.

Trotzdem ist das Problem lösbar:
Code:
Str = fileread('text.c');
CStr = strsplit(Str, '\n');
Insert_Length = funnyfunction();
Key = '#define benutzte_Laenge';
Index = strncmp(CStr, Key, length(Key));
CStr{Index} = sprintf('%s %i, Key, Insert_Length);

fid = fopen('text.c', 'w');
if fid == -1
  error('Cannot open file for writing');
end
fprintf(fid, '%s\n', CStr{:});
fclose(fid);

Gruß, Jan
[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Vesuv
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.07.15
Wohnort: Baden-Württemberg
Version: R2016b
     Beitrag Verfasst am: 24.08.2017, 14:39     Titel:
  Antworten mit Zitat      
Hi Jan,

vielen, vielen Dank für deine Antwort und die Hilfe!

Ich stimme dir zu, dass es nicht der schönste Weg ist, allerdings bleibt mir leider nichts anderes übrig.

es funktioniert jedenfalls super! Dankeschön
_________________

never touch a running system!
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.