Formatierung der Zeit in Dateinamen

tiego

Level-1
Beiträge
51
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag.

ich habe das Problem das mir beim Erstellen von Dateinamen für den FTP Upload nicht ein vollständiges Datum und Uhrzeit erhalte. (inkl. 0)
dies ist mein Code:

Code:
    oTime(SystemTime:=sys64, TimeDate:=sysTD);
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Day));
     sFileName := CONCAT(sFileName, '-');
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Month));
     sFileName := CONCAT(sFileName, '-');
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Year));
     sFileName := CONCAT(sFileName, '-');
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Hour));
     sFileName := CONCAT(sFileName, ':');
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Minute));
     sFileName := CONCAT(sFileName, ':');
     sFileName := CONCAT(sFileName, UINT_TO_STRING(sysTD.Second));
     sFileName := CONCAT(sFileName, '_');
     sFileName := CONCAT(sFileName, filename_destination);
     sFileName := CONCAT(sFileName,'.txt');

Das Ergebnis ist z.B. :
11-9-2012-8:5:12_Daten.txt

ich müsste aber so etwas erstellen:
11-09-2012-08:05:12_Daten.txt


könnte mir bitte jemand bitte weiterhelfen.

Vielen Dank
tiego
 
Hallo,
mein Vorschlag wäre, dass du die jeweiligen Werte (von Tag, Monat etc.) um 100 erhöhst, davon einen String machst und von diesem String die rechten beiden Zeichen verwendest.
Das könnte in etwa so aussehen :
Code:
sFileName := CONCAT(sFileName, [COLOR=#B22222][B]RIGHT[/B][/COLOR](UINT_TO_STRING([B][COLOR=#B22222]100 +[/COLOR][/B] sysTD.Day) ,2));

Du mußt hier aber noch checken ob die Syntax stimmt ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Vielen Dank.
hat super geklappt.

nun hoffe ich ihr könnt mir auch mit diesem Problemen weiterhelfen!?

Code:
flanke(CLK:= start );
 start := flanke.Q;

 IF start THEN
     convert_ready := FALSE;
     FOR i:=0 TO maxbytes DO                                                    (* Feld löschen *)
         result[i] := 0;
     END_FOR

     ptString := ADR(result);                                                        (* Pointer auf Anfang des Bytearrays *)
     index := 0;
     FOR i:=0 TO (maxdata) DO                    (* maxdata = globale Variable, die die Größe des Datenarrays definiert *)
         ptString^ := DELETE(DT_TO_STRING(dataarray[i,0].timestamp),3,1);    (* Zeitstempel --> Bytefeld *)
         index := index + LEN(ptString^);                                            (* feststellen wieviel Byte benutzt sind *)
         ptString := ADR(result[index]);                                            (* Pointer auf Ende des Wertes *)

         ptString^:= trenner;                                                        (* Trennzeichen *)
         index := index + LEN(ptString^);
         ptString := ADR(result[index]);

         FOR j:=0 TO anzMess DO            (* eigentliche Messwerte, die in den Spalten stehen, werden hier konvertiert *)
             ptString^ := INT_TO_STRING(dataarray[i,j].messw);                    (* eigentliche Messwerte -> Bytefeld *)
             index := index + LEN(ptString^);
             ptString := ADR(result[index]);

             ptString^ := trenner;                                                    (* Trennzeichen *)
             index := index + LEN(ptString^);
             ptString := ADR(result[index]);
         END_FOR

         ptString^:= '$r$n';                                                            (* new line *)
         index := index + LEN(ptString^);
         ptString := ADR(result[index]);
     END_FOR
     convert_ready := TRUE;                                                        (* Konvertierung abgeschlossen *)
 END_IF

Ich möchte einfügen das es für die einzelnen spalten im textfile eine bezeichnung gibt.

Momentan erhalte ich:
Code:
 2012-09-11-09:54:33    477       479      480    
 2012-09-11-09:54:38    1477    1479    1480    
 2012-09-11-09:54:43    2477    2479    2480    
 2012-09-11-09:54:48    3477    3479    3480    
 2012-09-11-09:54:53    4477    4479    4480


ich möchte das ich mit Variablen das erhalte:
Code:
 Zeit                            Variable 1 Variable 2 Variable 3
 2012-09-11-09:54:33         477          479      480    
 2012-09-11-09:54:38       1477         1479     1480    
 2012-09-11-09:54:43       2477        2479      2480    
 2012-09-11-09:54:48       3477        3479      3480    
 2012-09-11-09:54:53       4477        4479      4480


Wieviele Messwerte des Datenloggers aufgezeichnet werde kann erweitert werden. die variablen für die spaltenbezechnug müsten dies auch sein.
bitte könnt ihr mir helfen dies im Code zu integrieren?
Komme leider nicht mehr weiter.

Vielen Dank
Grüsse
Markus
 
Im Prinzip so, wie Du es jetzt auch schon tust,z. B.
Code:
ptString^:='Zeit               ';
index:=index+LEN(ptString^);
ptString:=ADR(result[index]);
Die Namen für die Spalten würde ich einem "ARRAY[0..anzMess] OF STRING" entnehmen.
Zuvor würde ich aber noch etwas anderes tun. Den oben gezeigten Code brauchst Du im Prinzip jetzt schon fünf mal, zum Einfügen der Überschrift noch ein paar mal mehr. Ich würde den in einen FB packen,
der den anzuhängenden String als VAR_INPUT bekommt und das Bytearray "Result" als VAR_OUTPUT rausgibt. Die Variablen "ptString" und "index" können dann als lokale Variablen im FB verschwinden, die Aufrufe werden übersichtlicher. Ausserdem sind Erweiterungen einfacher, wenn der String nicht einfach nur angehängt werden soll, sondern z. B. zuvor links oder rechts mit Leerzeichen aufgefüllt werden soll, um eine bestimmte Länge zu erreichen.
 
Hallo

Vielen Dank für die Antwort.

leider kenne ich mich in ST nicht so recht aus und bin ziemlicher Neuling in diesem Bereich.
ich kann deswegen auch nicht folgen.
könntet ihr mir bitte dies anhand eines Beispieles bitte erklären?

Vielen Dank
Markus
 
Zurück
Oben