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

zahl an bestimmte stelle in textdatei schreiben

 

modo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2011, 18:29     Titel: zahl an bestimmte stelle in textdatei schreiben
  Antworten mit Zitat      
Hallo,

ich hänge an einem scheinbar simplen Problem.
Ich will in einer Textdatei bestimmte Zahlen überschreiben
Nehmen wir an die Textdatei sieht folgendermaßen aus:

1
2
3
4
5

jetzt will ich die 3. zeile (also dort wo die 3 steht) mit einer 0 überschreiben, sodass die textdatei so aussieht

1
2
0
4
5

mein code sieht wie folgt aus:
Code:

fid = fopen('beispiel.txt','r+');
for i=1:3
     fgetl(fid)
end

fprintf(fid, '% 5.0f' , 6);
fclose(fid);
 


leider funktioniert er nicht so wie geplant. wo liegt mein fehler?


Modo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2011, 18:31     Titel:
  Antworten mit Zitat      
das Problem ist das bei der einstellung "r+" überhaupt nichts passiert obwohl die datei damit eigentlich zum lesen und zum schreiben geöffnet ist
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.03.2011, 19:44     Titel:
  Antworten mit Zitat      
Hallo

Zum Schreiben brauchst du FSEEK:

Code:

fid = fopen('beispiel.txt','r+');
for i=1:3
   fgetl(fid)
end
fseek(fid,0,0)
fprintf(fid, '%d' , 0);
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Modo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 12:16     Titel:
  Antworten mit Zitat      
funktioniert nicht.

jetzt sieht die textdatei soaus:

1
2
3
485

oder muss ich da noch was beachten?
trotzdem vielen dank für antwort.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.03.2011, 12:26     Titel:
  Antworten mit Zitat      
Und darf ich fragen, was funktioniert nicht?
Ich bin kein Hellseher, also bitte Änderungen in Code mitposten.

Außerdem habe ich, was ich gepostet habe, bei mir getestet
und das hat funktioniert.
Hast du denn wenigstens probiert nur mein Code auszuführen???

Außerdem muss du beachten, das es Kein Einfüge Modus ist sondern eine Ersetze Modus. Deswegen wird es genau so viele Zeichen ersetzt, wie du übergibst

z.B in deinem Ursprungscode, schreibst du 5 Zeichen, wobei du aber nur ein Zeichen ersetzen beabsichtigst?
Code:

fprintf(fid, '%5.0f' , 6);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Modo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 12:37     Titel:
  Antworten mit Zitat      
eigentlich ist es egal was in welcher Zeile steht. Ich will einfach nur den Inhalt EINER Zeile mit einem anderen ersetzen. In meinem Beipspiel eben in der 3. Zeile die "3" mit einer "0".
fprintf(fid, '%5.0f' , 6) ist natürlich falsch. Statt der 6 müsste dort eine 0 stehen.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.03.2011, 12:42     Titel:
  Antworten mit Zitat      
du schreibst aber 5 Zeichen statt 1

so wäre richtig:
Code:

fprintf(fid, '%d' , 0);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Modo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 12:59     Titel:
  Antworten mit Zitat      
Ok das funktioniert. vielen Dank.
Mein Problem ist aber noch nicht vollständig gelöst.
Der Punkt ist nämlich das ich für mein "reales" Problem nicht weiß wieviele Zeichen in der entsprechenden Zeile stehen. deshalb möchte ich einfach die komplette Zeile mit einem wert überschreiben.
Mit '%d' überschreibt er ja nur einen wert und wenn ich in die Zeile eine zweistelligen wert schreiben möchte dann schreibt er mir den in die nächste Zeile...
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.03.2011, 15:33     Titel:
  Antworten mit Zitat      
Zitat:

Mit '%d' überschreibt er ja nur einen wert und wenn ich in die Zeile eine zweistelligen wert schreiben möchte dann schreibt er mir den in die nächste Zeile...

Das kann man so nicht lösen, weil Textdatei ist nicht Excel.
Dort sind keine Zeilen oder Spalten, sondern das ist in Wirklichkein einfach eine Kette von Zeichen('1\n2\n3\n4\n5')
Kannst du denn in Array einfach, statt Einem Zwei Elemente einfügen?
Das geht nicht so einfach.
so kann man es lösen:
Code:

fid = fopen('beispiel.txt','r+');
for i=1:3
   fgetl(fid)
end
% position merken
rep_pos = ftell(fid);
% zu nächster Zeile springen
fgetl(fid)
% ein Zeichen zurückgehen( NewLine Zeichen)
fseek(fid, -1, 'cof')
% in variable speichern
rest=fread(fid)
% zu posiion kehren, wo ersetzt werden muss
fseek(fid, rep_pos, 'bof')
% ersetze
fprintf(fid, '%d' , 200000);
% schreibe zurück, was nicht verändert sollte
fwrite(fid,rest);
fclose(fid);
 


Noch besser wenn du komplett den Text einliest, ersetzt die Zahl, und dann zurück schreibst.
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.