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

Zahlen zusammenrücken

 

Caillean
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2010, 15:52     Titel: Zahlen zusammenrücken
  Antworten mit Zitat      
Hej!

Jetzt muss ich als Neuling doch auch mal eine Frage stellen. Ich suche mir schon nen Wolf im Forum, konnte aber leider zu meinem Problem nichts finden; also:

Ich habe eine csv file mit Messwerten. Diese sind mit dezimal Zeichen , versehen. Nun habe ich mit


Code:

copyfile('WAGO_1.csv','WAGO_1_old.csv')
file    = memmapfile('WAGO_1.csv','Writable',true);
comma   = uint8(',');
point   = uint8('.');
file.Data( file.Data== uint8(',')) = uint8('.');
delete(file)
 


das Dezimalkomma in Punkt geändert.
Problem: in dieser Datei sind aber auch Datumsangaben im Format dd:mm:yyyy vorhanden. Nun dachte ich mir, damit ich das Datum im zusammenhängenden Zahlenformat ddmmyyyy habe, kann ich das mit

Code:

copyfile('WAGO_1.csv','WAGO_1_old.csv')
file    = memmapfile('WAGO_1.csv','Writable',true);
dpoint    = uint8(':');
nichts    = uint8('');
file.Data( file.Data== uint8(':')) = uint8('');
delete(file)
 


genauso machen, aber ich bekomme immer die Fehlermeldung:

??? Error using ==> subsasgn
In an assignment A(Smile = B, the number of elements in A and B
must be the same.

Error in ==> memmapfile.memmapfile>memmapfile.hDoDataSubsasgn at 458
hSubsasgn(obj.

dataHandle, s(2:end), newval);

Error in ==> memmapfile.memmapfile>memmapfile.subsasgn at 590
hDoDataSubsasgn(obj, s, newval);

jetzt wäre ich sehr dankbar, wenn mir jmd nen Tipp geben könnte, wie ich das hinbekomme. : als leerzeichen ändern (' ') geht, aber ich will ja ('') haben Sad


schonmal vielen Dank für Eure antworten

gruß caillean
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.11.2010, 16:10     Titel:
  Antworten mit Zitat      
Hallo,

ich kanns gerade nicht ausprobieren, aber versuch mal:
Code:
file.Data( file.Data== uint8(':')) = [];

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Caillean
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2010, 16:19     Titel:
  Antworten mit Zitat      
damit hatte ich es auch schon probiert, funzt aber auch leider nicht.

weiß nicht wo das Problem ist?
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: 30.11.2010, 22:28     Titel: Re: Zahlen zusammenrücken
  Antworten mit Zitat      
Hallo Caillean,

Zitat:
Problem: in dieser Datei sind aber auch Datumsangaben im Format dd:mm:yyyy vorhanden. Nun dachte ich mir, damit ich das Datum im zusammenhängenden Zahlenformat ddmmyyyy habe, ...

Ist ddmmyyyy ein für Dich nützliches Zahlen-Format? Eiegentlich sieht das recht unpraktisch aus. Ich würde die CSV-Datein einlesen und dd:mm:yyyy per DATENUM oder DATEVEC umwandeln.

Ein Momory-Mapped-File ist natürlich eine hübsche Lösung. Eine andere Mglichkeit wäre:
Code:
FID = fopen('WAGO_1.csv', 'r');
Data = fread(FID, Inf, 'uint8=>uint8');
fclose(FID);
Data(Data == uint8(',')) = '.';
Data(Data == uint8(':')) = [];
FID = fopen('WAGO_1.csv', 'w');
fwrite(FID, Data, 'uint8');
fclose(FID);
 

Das ist etwas weniger effizient, glaube ich. Aber wenn Deine Files keine GigaBytes groß sind, sollte es kein Problem sein.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2010, 23:24     Titel:
  Antworten mit Zitat      
Hej!

Super, das funkioniert klasse Smile Vielen Dank!
mein Datenlogger packt schon ne menge Daten, aber die csv werden nie besonders groß.

Zu datenum:

dieses wandelt mir doch mein Datum in eine serial date number, z. B.

Code:

n = datenum('19-May-2001', 'dd-mmm-yyyy')

n =
      730990
 


also auch eine Zahl, mit der ich z. B. Vergleiche oder Filter erstelle. ist es dann nicht egal wenn diese die Darstellung 20110101 z. B. hat? Dann erkenne ich auch gleich mein echtes Datum, weil allein 730990 lässt ja rein visuell ja erstmal nicht aus's Datum schließen, oder habe ich das mit dem datanum falsch verstanden?

Ist auch erstmal als Probesimulation vorgesehen, weil ich bis jetzt noch nicht weiß, welches Datumformat mir mein Datenlogger schickt.


Viele Grüße
caillean
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 30.11.2010, 23:40     Titel:
  Antworten mit Zitat      
Hallo,

verwende wie bereist gesagt datevec:
Code:

sprintf('%d%d%d%*',datevec('19-May-2001', 'dd-mmm-yyyy'))
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Caillean
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 00:16     Titel:
  Antworten mit Zitat      
Hej!

Das werde ich mal ausprobieren.

Habt vielen Dank für Eure Antworten! Foren sind toll Smile

greetz
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: 01.12.2010, 00:20     Titel:
  Antworten mit Zitat      
Hallo Caillean,

Ich finde 20110101 auch besser als 730990. Allerdings ist letzters stetig, während ersteres ein paar völlig unlogische Lücken, verschiedene Anzahl von Tagen pro Monat und Schaltjahre beinhaltet. Mit ein wenig Übung ist einem 730990 dann doch vertrauter ;-)

Scherz beiseite: 20110101 ist praktisch, aber Du erzeugst ddmmyyyy, also 01012011, wobei die führende Null verschwindet, wenn man es als Zahl einliest. Das mag für Dein Programm völlig nebensächlich sein, es verursacht erfahrungsgemäß aber öfter mal ärgerliche Schwierigkeiten. yyyymmdd hat dagegen im Allgemeinen immer die gleiche Anzahl von Ziffern und ist sogar leicht sortierbar.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 00:35     Titel:
  Antworten mit Zitat      
ähm, ja. Sry, meine natürlich 20110101 = yyyymmdd :-)

Hast Recht mit der Darstellung und der führendenen Null. Ich werde mir die Daten denke ich auch in dieses Format ändern für meine Simulation.

kann ich die Formatsänderung auch gleich in den Code

Code:

FID = fopen('WAGO_1.csv', 'r');
Data = fread(FID, Inf, 'uint8=>uint8');
fclose(FID);
Data(Data == uint8(',')) = '.';
Data(Data == uint8(':')) = [];
FID = fopen('WAGO_1.csv', 'w');
fwrite(FID, Data, 'uint8');
fclose(FID);
 


unterbringen? Dass er mir das datum dd:mm:yyyy in meiner csv auch so schick umschreibt wie die Zeichen?

LG
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: 01.12.2010, 11:30     Titel:
  Antworten mit Zitat      
Hallo Caillean,

Zitat:
kann ich die Formatsänderung auch gleich in den Code
unterbringen? Dass er mir das datum dd:mm:yyyy in meiner csv auch so schick umschreibt wie die Zeichen?

Nein, das geht nicht direkt. Nach dem Einlesen der CSV-Datei in Spalten sollte das viel einfacher sein.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 11:44     Titel:
  Antworten mit Zitat      
Hej Jan!

Alles klar. Das werde ich dann so machen!

Habe vielen Dank für die Antworten.


LG
caillen
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.