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

Daten an bestimmte Stelle einer Datei schreiben

 

Inferno87
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 19:26     Titel: Daten an bestimmte Stelle einer Datei schreiben
  Antworten mit Zitat      
Hi Leute,

ich bin noch neu im Umgang mit Matlab nd hänge seit ner Weile vor einem kleinen Problem.
Ich möchte aus einer Datei bestimmte Werte auslesen, und diese in eine andere Datei schreiben. Das Auslesen hat gan gut geklappt. Dabei wird jede Zeile einzeln ausgelesen und die Zahlen, die an Stelle XY stehen gespeichert.

Das sieht bei mir folgendermaßen aus:
Code:


x=1;
k=1;
while x<100
   Line=fgetl(fid);
   if Line(2)=='''' ;
         
       name(k,1:23)=Line(3:25);
       Data(k,2)=str2double (Line(50:60));
       Data(k,3)=str2double (Line(61:70));
       Data(k,4)=str2double (Line(end-6:end));
       k=k+1;    
       end
x=x+1;  
   
end

 


Das klappt wie gesagt schon mal wunderbar.

Dann erstelle ich eine neue Datei:

Code:

%% Dummy Datei öffnen und neue erstellen

fid2 = fopen('Dummy.kin','r'); %nehme Dummy-datei
copyfile('Dummy.kin','Ergebnisdatei.kin')%kopiere Dummy und benenne um
fid2 = fopen('Ergebnisdatei.kin','r+') %öffne kopierte datei und schreibe

 


Die Ergebnisdatei.kin beinhaltet schon alles. Nun sollen die gespeicherten Werte an eine bestimtme Stelle geschrieben werden.

Irgendwo in der Datei steht
"' Point 1 ' 0.0 600.0 255.0"

Diedrei Koordinaten sollen ersetzt werden.
Das Problem dabei ist, dass wenn ich das wie folgt mache, Matlab die Werte in die nächste Zeile schreibt:

Code:

%% In Datei schreiben
y=1;
while y<235
   Line2=fgetl(fid2);
   p=0;
   
   
    for f=1:length(Data)
        a=[Data(f,2)];
        b=[Data(f,3)];
        c=[Data(f,4)];
   
    end
   
    p=findstr(Line2,'Point');
      if p>1
           
       
      fseek(fid2,0,0);
     
     
      fprintf(fid2,'%10.1f%10.1f%10.1f',a,b,c);
     
       
   end
y=y+1;  
   
end
fclose(fid2);
 




Das sieht dann ungefähr so aus:

Axis System '

' '
' Point 1 Wheel Center ' 0.0 600.0 255.0
1030.0 -600.0 255.0act ' 0.0 600.0 0.0



Ich hoffe, Ihr könnt mir dabei helfen.

Beste Grüße
Inferno87
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 19:34     Titel:
  Antworten mit Zitat      
Hallo Inf-erno

wenn in eine Datei etwas überschrieben wird, werden immer so viele Bytes ersetzt
wie geschrieben wurde, Zeilenumbrüche werden ignoriert und der Inhalt nicht nach
hinten verschoben.

Lösung:
Datei nicht kopieren sondern Zeilenweise einlesen (was Du mit der neuen Datei
sowieso schon machst) und die Zeile entweder gleich in die neue Datei schreiben,
falls sie nicht Point... entspricht, andernfalls die Zeile durch die neu generierte
ersetzen.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Inferno87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 20:57     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort. Hab jetz folgendes versucht. Aber er schreibt nicht in die neue Datei:

Code:

%% Dummy Datei öffnen und neue erstellen

fid2 = fopen('Dummy.kin','r+'); %nehme Dummy-datei
fid3 = fopen('Ergebnisdatei.kin','w');

%% In Datei schreiben
y=1;
while y<235
   Line2=fgetl(fid2);
   p=0;
   
   
   % for f=1:length(Data)
   %     a=[Data(f,2)];
   %     b=[Data(f,3)];
   %     c=[Data(f,4)];
   
  %  end
   
    p=findstr(Line2,'Point');
      if p>1          
     
    %  fprintf(fid3,'%10.1f%10.1f%10.1f',a,b,c);
     
      else fwrite(fid2,Line2);
       
   end
y=y+1;  


end
fclose(fid);
fclose(fid2);
fclose(fid3);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 22:57     Titel:
  Antworten mit Zitat      
fwrite(fid2,Line2);
weil du in die falsche Datei schreibst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Inferno87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 23:29     Titel:
  Antworten mit Zitat      
Ja stimmt...ich Depp Wink
Also so funktioniert es erst mal:

Code:

y=1;
while y<235
   Line2=fgetl(fid2);
   p=0;
   
   
    %for f=1:length(Data)
     %   a=[Data(f,2)];
      %  b=[Data(f,3)];
       % c=[Data(f,4)];
    a=434;
    b=354;
    c=-362;
   % end
   
    p=findstr(Line2,'Point');
      if p>1
        fseek(fid3,53,0);
        fprintf(fid3,'%d \t %d \t %d \n',a,b,c);
     
      else
         
          fprintf(fid3,'%s\n',Line2);
          %fwrite(fid3,Line2);
       
   end
y=y+1;  


end
 


nur wie sag ich ihm jetz, dass er in der Zeile, in der "Point" steht,die ersten 50 Zeichen übernimmt und an die Stelle 53 die Werte einträgt?
Mit fseek funktioniert das irgendwie nicht.

Danke und Grüße
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.