AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Maske für FormatMaskText

Ein Thema von ringli · begonnen am 14. Feb 2015 · letzter Beitrag vom 14. Feb 2015
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#1

Maske für FormatMaskText

  Alt 14. Feb 2015, 11:50
Delphi-Version: XE4
Hallo,

ich möchte Strings in der Form "2015-02-12_14-39-52" in "2015-02-12 - 14:39:52" umformatieren. Dazu würde ich gerne die FormatMaskText-Funktion nutzen. Leider scheitere ich grade am zusammenstellen der Maske. Was ich bisher habe (Testcode):
Delphi-Quellcode:
s1 := '2015-02-12_14-39-52';
s2 := FormatMaskText('CCCC-CC-CC - CC:CC:CC;C;C', s1);
ShowMessage(s2);
Mein Ergebnis sieht dann so aus: "2015-02-12 - : : "
Irgendwas läuft da also noch schief und ich habe grade keine Ahnung was genau. Hat jemand zufällig Erfahrungen beim Erstellen der Masken und kann mir hier grade auf die Sprünge helfen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 12:13
Muss es denn FormatMaskText sein?
Ich würde ein paar Zeilen Schreiben um den properitären String in ein TDateTime zu überführen und dann mit FormatDateTime das dan wieder ausgeben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 12:17
Dachte eigentlich das das der einfachste Weg wäre, aber scheinbar sieht es nicht danach aus. Wie würdest du denn den gegebenen String in ein TDateTimeFormat kriegen?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 12:52
FormatMaskText ist ja mega kompliziert? Man kann sich ja zum Beispiel eine eigene function erstellen (uses DateUtils):
Delphi-Quellcode:
function ExtractDate(const Value: string; const Default: TDateTime): TDateTime;
var
  AYear, AMonth, ADay, AHour, AMinute, ASecond: word;
begin
  AYear := StrToIntDef(Copy(Value, 1, 4), 0);
  AMonth := StrToIntDef(Copy(Value, 6, 2), 0);
  ADay := StrToIntDef(Copy(Value, 9, 2), 0);
  AHour := StrToIntDef(Copy(Value, 12, 2), 0);
  AMinute := StrToIntDef(Copy(Value, 15, 2), 0);
  ASecond := StrToIntDef(Copy(Value, 18, 2), 0);
  if IsValidDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond, 0) then
    Result := EncodeDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond, 0)
  else
    Result := Default;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(DateTimeToStr(ExtractDate('2015-02-12_14-39-52', 0)));
end;
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 13:10
Danke für eure Antworten.

Da ich den String nur zur besseren Lesbarkeit umformatiere, habe ich mich jetzt für diese Lösung entschieden:
Delphi-Quellcode:

s := '2015-02-12_14-39-52';
sDate := Copy(s, 1, Pos('_', s) - 1);
sTime := Copy(s, Pos('_', s) + 1, Length(s));
sTime := StringReplace(sTime, '-', ':', [rfReplaceAll, rfIgnoreCase]);

ShowMessage(sDate + ' - ' + sTime);
Bin aber trotzdem noch an einer Lösung via FormatMaskText interessiert falls jemand noch eine Idee hat.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 13:51
Findest du es nicht etwas seltsam, dass das Speichern eines Wertes abhängig von der Bearbeitung im UI ist?

Du hast einen Zeitwert, dann verarbeite/speicher den auch als solchen in einem TDateTime .

Für die Bearbeitung erstellt man sich dann einen Konverter, der die Daten für die Bearbeitung so aufbereitet, dass diese nun in der gewünschten Art und Weise bearbeitet werden können und eben auch wieder zurück in das eigentliche Datenformat.

Das Speichern eines solchen Wertes erfolgt dann auf die gleiche Art und Weise (mit einem Konverter).

Auf einmal wird das Handling der unterschiedlichsten Datentypen logisch, eindeutig und einfach.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#7

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 14:08
Bin aber trotzdem noch an einer Lösung via FormatMaskText interessiert falls jemand noch eine Idee hat.
Dafür ist FormatMaskText nicht geeignet. In deinem Fall sollen vorhandene Formatierungszeichen ('_', '-') durch andere ersetzt werden ('-', ':'). Das ist aber nicht die Aufgabe von FormatMaskText.

Hier mal ein Beispiel für die richtige Verwendung:

Delphi-Quellcode:
  s1 := '2015-02-12_14-39-52';
  { alle Formatierungszeichen löschen }
  s1 := StringReplace(s1, '-', '', [rfReplaceAll]);
  s1 := StringReplace(s1, '_', '', [rfReplaceAll]);
  {  s1 ist jetzt '20150212143952' }
  s2 := FormatMaskText('0000-00-00 - 00:00:00;0; ', s1);
ergibt '2015-02-12 - 14:39:52'
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 14:54
Findest du es nicht etwas seltsam, dass das Speichern eines Wertes abhängig von der Bearbeitung im UI ist?
Also es geht hier um vorhandene Ordnernamen die ich für den Benutzer im UI nur etwas besser lesbar anzeigen möchte. Daher liegt hier kein TDateTime-Wert vor den ich weiterverarbeiten müsste.

Dafür ist FormatMaskText nicht geeignet.
Danke für den Hinweis Uwe. War mir nicht klar, das FormatMaskText dafür nicht geeignet ist.

Geändert von ringli (14. Feb 2015 um 14:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 15:03
Findest du es nicht etwas seltsam, dass das Speichern eines Wertes abhängig von der Bearbeitung im UI ist?
Also es geht hier um vorhandene Ordnernamen die ich für den Benutzer im UI nur etwas besser lesbar anzeigen möchte. Daher liegt hier kein TDateTime-Wert vor den ich weiterverarbeiten müsste.
Und wenn dort ein Ordner liegt der so
Code:
aaaa-aa-aa_aa-aa-aa
heisst, dann macht es bumm?

Ist es nicht eher so, dass du einen Ordner erwartest, der in seinem Namen einen Zeitpunkt verschlüsselt hat und somit eben doch ein TDateTime repräsentiert?

Das meinte ich mit dem Konverter beim Speichern ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Maske für FormatMaskText

  Alt 14. Feb 2015, 15:09
Nein, wenn ein Ordner nicht ins Schema passt wird im UI "Zeitpunkt unbekannt" angezeigt. Auch damit kann ich weiterarbeiten, da intern der reale Ordnername verwendet wird.

[EDIT]
Aber in einem hast du Recht: Natürlich verwende ich den Ordnernamen um einen Zeitstempel zu speichern und später wieder auszulesen. So kann der Benutzer im Zweifelsfall den Ordner leichter im Dateisystem wiederfinden als bei einem kryptischen Namen wie "1234567890" der absolut nichtssagend ist.

Geändert von ringli (14. Feb 2015 um 15:16 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz