Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Ingenieur für Prüfstandssysteme und HiL-Testing (m/w)
Konzeptionierung neuer Hardware-in-the-Loop (HiL) Prüfstandssysteme
GIGATRONIK Köln GmbH - Köln

Test- und Erprobungsingenieur (m/w)
Erstellung von Testspezifikationen (z. B. in Doors) für Kundenfunktionen
Automotive Safety Technologies GmbH - Ingolstadt

Testingenieur (w/m) Qualitätssicherung ModelDesk
Erstellung von automatisierten und interaktiven Tests
dSPACE GmbH - Paderborn

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

TXT Dateien editieren

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2007, 12:34     Titel: TXT Dateien editieren
  Antworten mit Zitat      
Hallo,

wäre sehr froh wenn mir jemand bei diesem Problem helfen könnte. Es soll eine TXT Datei editiert werden. D.h. an einer bestimmten Stelle ein Wert durch einen neuen durch Überschreiben ersetzt werden. Dies erfolgt durch den Befehl fprintf. Falls der neue Wert jedoch mehr Stellen hat als der alte wird automatisch die nächste Zeile überschrieben so wie unten zu sehen


123456 %alter Wert
nächste Zeile

12345678 %neuer Wert
chste Zeile

Gibt es denn eine Möglichkeit wie man das verhindern könnte?

Danke schon mal für die Hilfe!


Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 24.09.2007, 22:34     Titel:
  Antworten mit Zitat      
Hmm, vielleicht könntest Du ein Beispiel für die Verwendung von fprintf angeben, dann wäre die Frage klarer. Es sieht so aus, als ob \n am Stringende überschrieben würde. Evtl. würde es helfen ein \n einzufügen falls mehr Ziffern ersetzt werden als vorher vorhanden waren? Komisch ist aber, das dann der Zeilenumbruch trotzdem stattfindet....
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2007, 07:58     Titel:
  Antworten mit Zitat      
Die TXT Datei sieht zu Beginn zum Beispiel so aus:

12345
Nächste Zeile
Nächste Zeile2

Dann öffne ich die Datei im Lese und Schreibmodus und überschreibe die Zeile mit dem neuen Wert:

fid = fopen(openfile,'rt+');
fprintf(fid,'%s\n','12345678')

Damit sieht die Datei so aus:

12345678
e Zeile
Neue Zeile2

Ich bräuchte aber:

12345678
Neue Zeile
Neue Zeile2

Es scheint, dass einfach vorhandene Zeichen einfach überschrieben werden und sobald keine mehr in der Zelie vorhanden sind einfach die aus der nächsten überschrieben werden. Gibt es die Möglichkeit neue Zeichen in eine Zeile einzufügen ohne alte zu überschreiben?
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 25.09.2007, 09:17     Titel:
  Antworten mit Zitat      
Hallo,

so wie ich das sehe, kann man mit fprintf immer nur ein Zeichen durch ein neues ersetzen, wobei ein Zeilenumbruch als ein Zeichen interpretiert wird. Auf http://www.mathworks.com/support/tech-notes/1600/1602.html wird in Section 4 das umgekehrte Problem thematisiert: Wenn die neue Zahl weniger Zeichen hat, bleiben die Reste der alten Zahl stehen - auch nicht schön. Das Problem ist also ein prinzipielles und bekannt. Es wird aber auch eine Umgehung angeboten, die ich hier mal auf deine Frage angewandt wiedergebe:

Man liest mit fgetl die erste Zeile ein, speichert dann den Rest der Datei in einer Variablen, springt mit fseek an den Anfang der Datei, schreibt dann die neue Zahl und zuletzt den Rest der Datei wieder zurück. Ist zwar eher umständlich, funktioniert aber.
Code:
fid = fopen(openfile,'rt+');
temp_line = fgetl(fid);           % erste Zeile
c = fread(fid,inf,'uchar');       % Rest der Datei
fseek(fid,0,'bof');               % wieder an den Anfang springen
fprintf(fid,'%s\n','12345678');   % neue Zahl schreiben
fwrite(fid,c,'uchar');            % Rest wieder einfügen
fclose(fid);

Steht die zu ersetzende Zahl nicht in der ersten Zeile, geht man so vor wie bei Example 3a in Section 4 auf der oben genannten Seite. Damit kann man in eine beliebige Zeile wandern und ab da dann so vorgehen wie hier. Ist das praktikabel?
Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2007, 15:04     Titel:
  Antworten mit Zitat      
Super, genau das habe ich gesucht. Danke!

Gruß, Pablo
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 803
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 26.09.2007, 13:49     Titel:
  Antworten mit Zitat      
File komplet ins MATLAB in ein String einlesen. Entsprechende Stellen nachbessern/austauschen/ergänzen und anschliessend den vorhandenen File mit aktualisiertem String überschreiben...

MfG
P.S. theoretisch kann man einen Reifen direkt am Rad austauschen, aber einfacher ist es zuerst das Rad abzumontieren ... Wink
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.