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

.txt Datei laden - umschreiben - als neue .txt abspeichern

 

...tetris...

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 15:55     Titel: .txt Datei laden - umschreiben - als neue .txt abspeichern
  Antworten mit Zitat      
Hallo Leute,

habe folgendes Problem, dass ich nicht gelöst bekomme:

Ich möchte eine .txt Datei in Matlab laden. Nun möchte ich nur eine Zahl ändern und dies als neue .txt Datei abspeichern.

Ich habe schon mehrer Sachen ausprobiert. Das aktuellste, wass fasst funktioniert ist das:

Code:
fid=fopen('textdatei.txt','r');
file=[];
for i=1:1:100
    Zeile= fgets(fid);
    file{i,1}=Zeile;
end
file{20,1}= ('Wert = 1');
fclose(fid);

fid = fopen('neueTextdatei.txt','w');
fprintf(fid,'%s',file{:});
fclose(fid);


Hier is nur das Problem, dass es keinen Zeilenumbruch nach der Stelle "Wert=1" mehr gibt. Wie kann ich diesen erzeugen?

Oder gibt es vlt eine elegantere und bessere Methode, da ich den Wert, den ich verändere in einer Schleife verändern möchte und da stört mich das "Wert= ". Das heißt es wäre super, wenn ich nur die Zahl verändern könnte ohne den Text anzufassen.

Bin für jede Anregung sehr Dankbar.
Grüße


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.06.2013, 17:17     Titel: Re: .txt Datei laden - umschreiben - als neue .txt abspeiche
  Antworten mit Zitat      
Hallo ...tetris...,

Steht die Zahl am Ende des Files? Dann:

Code:
str = fileread('textdatei.txt');
index = strfind(str, 'wert =');
str = [str(1:index(end) + 5), sprintf('%d\n', newValue));
fid = fopen('newTextDatei.txt', 'w');
if fid == -1, error('Cannot open file for writing'); end
fwrite(fid, str, 'char');
fclose(fid);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
...tetris...

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 17:26     Titel:
  Antworten mit Zitat      
Nope is leider mitten im .txt file
 
...tetris...

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 18:11     Titel:
  Antworten mit Zitat      
ich habe jetzt eine etwas umständliche Lösung gefunden:

fid = fopen('textdatei.txt');
d = textscan(fid,'%s','delimiter','\n');
d{1};
d=ans;
d{20,1}=('Wert = 1');
fclose(fid);

fid=fopen('textdatei2.txt','w');
fprintf(fid, '%s\n', d{:});
fclose(fid);



Jetzt noch eine andere Frage:
Wenn ich das alles in einer for-schleife laufen lasse, kann ich dann die Zahl hinter "Wert = (diese Zahl) " irgendwie als Laufvariable nehmen?
Genau das gleiche würde ich gern mit der neuen textdatei machen. Also:
"textdatei(diese Zahl).txt" - hier soll die Zahl als Laufvariable fungieren. Ist das möglich???

Grüße
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.06.2013, 18:32     Titel:
  Antworten mit Zitat      
Hallo ...tetris...,

Bitte verwende die Code-Umgebung für code. Danke!

Die Variable "ans" direkt zu verwenden ist sehr tückisch. Das würd ich unter allen Umständen vermeiden! Besser:
Code:
d = textscan(fid,'%s','delimiter','\n');
d = d{1};
d{20,1} = 'Wert = 1';  % Keine Klammern erforderlich
fclose(fid);


Siehe:
Code:
for k = 1:10
  disp(sprintf('wert = %d', k));
  FileName = fullfile(cd, sprintf('File%.3d', k));
  disp(FileName);
  % Hier ginge dann auch "fopen(FileName)" etc.
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Rek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 18:56     Titel:
  Antworten mit Zitat      
Leicht verändert funktioniert auch deine erste Variante...wohl einfacher

Code:
%Hier bspw. Laufvariable definieren
newValues = [1 5];

% Schleife zum Anpassen der Textdatei
for i=1:length(newValues)
    str = fileread('textdatei..txt');
    index = strfind(str, 'Wert=');
    str(index+5) = sprintf('%d', newValues(i));
    filename = ['textdatei', sprintf('%d', newValues(i)),'.txt'];
    fid = fopen(filename, 'w');
    if fid == -1, error('Cannot open file for writing'); end
    fwrite(fid, str, 'char');
    fclose(fid);
end


mfg
 
...tetris...

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2013, 14:05     Titel:
  Antworten mit Zitat      
Danke für die Hilfe. hab das jetz etwas anders hinbekommen Smile

Jetz noch eine kleine andere Sache.
Ich wollte eine Datei einlesen und habe mir das so gedacht:
Code:

i=3;
fid=fopen('Datei',num2str(i),'.s01','r');             %Öffnen der Datei<i>.s01
a1=importdata('Datei',num2str(i),'.s01', ' ' ,2) %einlesen der 2. Zeile
a2=importdata('Datei',num2str(i),'.s01', ' ' ,4) %einlesen der 4. Zeile
fclose(fid);
 

Möchte das mit in einer Schleife laufen lassen, deshalb das num2str(i). Leider klappt es nicht wie ich mir das gedacht habe. Wenn ich anstatt num2str(i) eine zahl eingebe funktioniert es.
Wie kann ich das für meine shcleife optimieren?

Grüße
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.06.2013, 14:10     Titel:
  Antworten mit Zitat      
Hallo ...tetris...,
Code:
fid = fopen('Datei', num2str(i), '.s01', 'r');

Hier sind die ertsen 3 Inputs die Strings 'Datei', '1' und '.s01'. Der Datei-Name muss aber ein einziger String sein:
Code:
fid = fopen(['Datei', num2str(i), '.s01'], 'r');

Die eckigen Klammern fügen den Inhalt zu einem Array zusammen. Ich finde dies hübschr:
Code:
fid = fopen(sprintf('Datei%d.s01', i), 'r');

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
...tetris...

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2013, 15:28     Titel:
  Antworten mit Zitat      
Super vielen Dank...

Das Programm funzt Smile
 
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.