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 überschreiben

 

Platin
Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2011, 19:36     Titel: Daten überschreiben
  Antworten mit Zitat      
Hey an Alle,

ich sitze an folgendem Problem.
Ich habe eine txt-Datei welche folgendermaßen aufgebaut ist:

Auswertung Daten 2011
----------
Messdaten:
+++++
Spannung(V)=20
Strom(A)=4

So ist die Grundstruktur.
Was ich nun vorhabe ist folgendes. Ich habe ein skript geschrieben das mir immer wieder neue Werte für die Spannung und den Strom berechnet und möchte nun das jedes mal wenn ich das Skript ausführe die alten Messdaten überschrieben werden.
also mein Skript enthält dann eine Variable V, welche den wert für die Spannung enthält und eine Variable A die den Wert für den Strom enthält.
A und V sollen also die alten Messwerte ersetzen.
wie kann ich das am besten anstellen?
Ist halt schwierig finde ich weil die Daten so mitten in einem Text stehen. Aber den aufbau der Textdatei kann ich aus best. gründen nicht ändern.
Ich habe bereits gelesen und auch versucht(leider gescheitert), dass man das mit fread oder so machen kann. Oder liege ich da falsch, bzw gibts da ein einfacheren Weg?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2011, 18:22     Titel:
  Antworten mit Zitat      
kann mir niemand helfen?
Hat von euch noch nie jmd. Daten mit Matlab derart überschrieben?
Braucht ihr mehr Infos oder versteht ihr das Problem nicht?
Wenn das der Fall ist versuche ich das ganze auch nochmal zu erklären.

Grüße
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: 07.01.2011, 23:37     Titel:
  Antworten mit Zitat      
Hallo Platin,

Poste doch mal, was Du bisher versucht hast.
Ich würde das ganz File in einen Cell String einlesen, mit FIND(STRNCMP) nach den entsprechenden Zeilen suchen und sie ganz neu schreiben per SPRINTF. Danach per FOPEN und FPRINTF die Datei wieder vollständig überschreiben.

Mit FREAD und FWRITE im File herumzustochern ist dann unmöglich, wenn Du z.B. aus einer 20 eine 120 machen möchtest: FWRITE kann die folgenden Zeichen nicht verschieben, sondern nur Zeichen überschreiben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2011, 10:54     Titel:
  Antworten mit Zitat      
Hey,

ich bin jetzt leider zu Hause und kann nicht direkt posten was ich gemacht habe. Das geht erst Montag.
Aber im Prinzip habe das den File per fopen geöffnent. Dann wollte ich per fread alles komplett einlesen nach den entsprechenden Variablen suchen und die im workspace abspeichern. Anschließend wollte ich eigentlich mittels strrep die "alte" Spannung durch die neue ersetzen. Weil die neue Spannung befindet sich bereits in Form einer Variablen im Workspace.
Was sich glaube ich blos als schwierig erweisen wird, ist die sache mit fread. also per fgetl(fid) komme ich natürlich mit ner Schleife und einer ensprechenden laufvariablen in die gewünschte Zeile. Dann kann ich natürlich auch anschließend per strrep sagen was dort ersetzt werden soll, aber mir bereitet eben noch kopfschmerzen dass das ganze automatisch passieren soll. Das heißt es muss vorher die alte Spannung in form einer Variablen erstmal im workspace abgespeichert werden und ich denke das wird nicht so leicht, weil die alte spannung sich ja immer wieder ändert. Die behält ja nicht ihren wert, weswegen es nicht mgl. ist in strrep einen festen wert ein zugeben. deswegen dachte ich, es wäre gut wenn ich in strrep eine Variable eingebe, die immer den aktuellen wert der zu überschreibenden spannung besitzt.

Ist kacke ohne meinen code, ich weiß. Aber weißt du was ich meine?

Grüße
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: 08.01.2011, 19:03     Titel:
  Antworten mit Zitat      
Hallo Platin,

Du kannst mit STRREP den String verändern, aber nicht das File. Insofern bringt das nicht viel.
Wie wäre dies:
Code:

FID = fopen(FileName, 'r');
DataCell = textscan(FID, '%s', 'delimiter', '\n');
fclose(FID);
C = DataCell{1};

Index = find(strncmp(C, 'Spannung(V)', 11));
U_old = sscanf(C{Index}, 'Spannung(V)=%g');
C{Index} = sprintf('Spannung(V)=%g', U_new);

Index = find(strncmp(C, 'Strom(A)', 8));
I_old = sscanf(C{Index}, 'Strom(A)=%g');
C{Index} = sprintf('Strom(A)=%g', I_new);

FID = fopen(FileName, 'w');
fprintf(FID, '%s\n', C{:});
fclose(FID);
 

Passt das? Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2011, 13:16     Titel:
  Antworten mit Zitat      
Hmm,

also das könnte klappen.
Ich muss das morgen dann gleich mal ausprobieren.
Ich muss mal gucken wie ich das dann noch mit dem textscan mache, weil ich das in Matlab und Octave nutzen möchte und in Octave textscan nicht verfügbar ist, aber ich probiere das erstmal soweit in matlab und versuche es dann irgendwie zu übersetzen.
Ich danke dir erstmal und melde mich gleich montag mal.

Aber wozu definierst du eigentlich U und I_old? die werden ja nicht weiter benutzt?

Grüße
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: 09.01.2011, 18:01     Titel:
  Antworten mit Zitat      
Hallo Platin,

Zitat:
Aber wozu definierst du eigentlich U und I_old? die werden ja nicht weiter benutzt?

Ich habe einfach mal ein Beipiel angegeben und etwas herum geraten. Ich habe mir gedacht, dass die Werte schon für irgendetwas nützlich sein werden, ansonsten würden sie doch erst gar nicht in das File geschrieben werden...
Solche Ungereimtheiten treten genau dann auf, wenn man keinen Orginal-Sourcecode zur Verfügung hat, sondern sich als Anwortender den ganzen Code selbst aus den Fingern saugt. Oder mit Deinen weniger diplomatischen Worten:
[quote]Ist kacke ohne meinen code, ich weiß.[/code]

Ich habe im Netz ein DATAREAD für Octave gesehen. Das sollte genauso gut sein, liefert die Antwort aber direkt als {1 x nLines} cell string, statt als {{1 x nLines}} cell of cell string (oder {nLines x 1} ?).

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2011, 19:25     Titel:
  Antworten mit Zitat      
Hey,

ich habe es jetzt soweit gelöst.
Aber ich stoße einmal mehr auf ein Problem. Ich habe zwischendrin eine Matrix erstellt, da ich in dieser was ändern muss. Anschließend möchte ich aber diese Matrix wieder in ein Cell-Array zurückverwandeln um jenes dann wie in deinem Code geschrieben, in als file wieder abzuspeichern.
Ich stoße aber auf Fehlermeldungen da die Cell die ich rausbekomme nicht wie die anderen in folgender form bekomme:

z.B wie bei dir bezeichnet C:

[1,1]= 74 75
[1,2]= 66 68
[1,3]= 21 23

sondern in der Form, bei mir im speziellen K2:

[1,1]=
74 75
[2,1]=
66 68
[3,1]=
21 23

Dann meckert Matlab bereits wenn ich allein dieses Cell-Array versuche als file zu speichern:
Code:
warning: implicit conversion from matrix to string

Ein weiteres Problem ist dass, das im Vorhinein die Datei die ich einlese zerteilt habe, da in den ersten Zeile text stand. Das heißt den 1. teil, mit dem text konnte ich wie gehabt einlesen und bekomme auch die richtige form, so das ich diesen teil bereits als file speichern kann.
Aber ich möchte dann zum schluss ja beide teile auch noch zusammensetzen.
Das Hauptproblem ist also der 2. Teil da ich hier eine Matrix in die entsprechende Form umwandeln muss so das ich den 2.Teil und den 1.Teil zusammenfügen kann.
Weißt du Rat?
Hier jetzt aber mal mein Code:
Code:


K2=num2cell(J4,2); % J4 ist eine 1x2-Matrix   % 2.Teil !! -Werte

Fid = fopen('file1,'r');
K=[];
for i=1:8                              % 1.Teil-Header mit Text
K=[K strsplit(fgetl(Fid),"\t")]; % meine Art textscan zu ersetzen
endfor

G={K,K2};

FID = fopen('file2', 'w');
fprintf(FID, '%s\n', G{:});     %funktioniert nicht da K2 nicht korrekt
fclose(FID);
 


Ja und K1 geht halt und sieht wie folgt aus:

[1,1]= Überschrift
[1,2]= Hier steht Text
[1,3]= Hier steht noch mehr Text

viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 16:54     Titel:
  Antworten mit Zitat      
Ok, ich mache mal einen neuen thread auf, da sich das hier glaube ich niemand mehr anschaut.
Weil ich glaube es geht jetzt schon mehr um das Problem Cell-Arrays als das Problem etwas zu überschreiben.

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

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 16:29     Titel:
  Antworten mit Zitat      
kann mir denn keiner helfen?
komme wirklich nicht weiter?

Bitte !

Grüße
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: 13.01.2011, 02:08     Titel:
  Antworten mit Zitat      
Hallo Platin,

Ich kann Dir nicht helfen, weil ich das Problem nicht verstehe.

Zitat:
[1,1]= 74 75
[1,2]= 66 68
[1,3]= 21 23

sondern in der Form, bei mir im speziellen K2:

[1,1]=
74 75
[2,1]=
66 68
[3,1]=
21 23

Dann meckert Matlab bereits wenn ich allein dieses Cell-Array versuche als file zu speichern:
Code:
warning: implicit conversion from matrix to string


Hier habe ich schon keine Ahnung, worum es gehen könnte. Kannst Du vielleicht die entsprechenden Befehle posten? Wie könnte ich sonst darauf antworten?!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 11:09     Titel:
  Antworten mit Zitat      
Hey Jan,

ich habe die ganze Sache mal in einen anderen Thread geschoben und rätsel gerade mit Sco wie das gehen könnte.
Da wird bestimmt deutlich was ich will. Ich gebe zu das wurde hier ein wenig unübersichtlich. Würde mich freuen wenn du miträtselst.^^
Hier mal der Link:
http://www.gomatlab.de/viewtopic,p,59391.html#59391

Danke dir
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.