Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datum mit Datum austauschen (https://www.delphipraxis.net/112055-datum-mit-datum-austauschen.html)

aaron 14. Apr 2008 14:22


Datum mit Datum austauschen
 
Hallo liebes Forum
Ich habe in einer Spalte im Stringgrid ein Datum stehen, rechts neben dieser Spalte in einer zweiten habe ich ein TDatetimepicker.
Kann man mittels Stringreplace das alte Datum mit dem neuen Datum im TDatetimepicker austauschen?

Grüße
Aaron

SirThornberry 14. Apr 2008 14:26

Re: Datum mit Datum austauschen
 
nein, mit stringreplace kannst du kein TDateTime ersetzen.

mkinzler 14. Apr 2008 14:26

Re: Datum mit Datum austauschen
 
Du kannst doch die Zelle direkt ansteuern

hoika 14. Apr 2008 14:30

Re: Datum mit Datum austauschen
 
Hallo,

iCol,iRow sind die Grid-Zelle mit dem Datum

Delphi-Quellcode:
Grid.Cells[iCol,iRow]:= FormatDateTime('dd.mm.yyyy', DateTimePicker.Date);

Heiko

aaron 14. Apr 2008 14:34

Re: Datum mit Datum austauschen
 
Sorry, hatte vergessen zu sagen dass in der gleichen Spalte in der das Datum steht sich auch noch Text befindet.
In etwa so:
Wurde getestet am 12.11.2007, getest wurde nicht usw.
Und dieses Datum soll dann durch das Datum was im TDatetimePicker ausgetauscht werden.
Gruß
Aaron

mkinzler 14. Apr 2008 14:37

Re: Datum mit Datum austauschen
 
Du kannst obigen Code dementsprechend anpassen.

hoika 14. Apr 2008 14:46

Re: Datum mit Datum austauschen
 
Hallo,

der Text sollte intern ohne das Datum (nur als Platzhalter)
gespeichert sein. Das Datum wird extra gespeichert.
Beim Füllen des StringGrids wird dann der Text zusammengebaut.

Willst du den Text komplett mit Datum speichern,
und dann das Datum ersetzen ?
Viel Spass beim Rum-Pfriemeln.

Ein Ansatz wäre das Aufsplitten des Textes über eine StringList
(Separator wäre das Leerzeichen) und das Prüfen der einzelnen Strings
per TryStrToDate (Jedi ?)
oder die TryStrToDate selberbauen per
Delphi-Quellcode:
try
  StrToDate();
except
end;
order per Val

Dann kann dieser Datums-String ersetzt werden
und per StringList.Text hats du wieder deinen Satz.

Heiko

aaron 14. Apr 2008 15:01

Re: Datum mit Datum austauschen
 
Hallo...
also ich habe es so gemacht:
Delphi-Quellcode:
 Stringgrid1.Cells[1, i]:= FormatDateTime('dd.mm.yyyy', Stringgrid1.DateTimePicker.Date);
aber irgendwie werden nun alle Zeilen ersetzt.
Früher habe ich immer das Wort Datum durch das DateTimePickerdatum ersetzt.
Delphi-Quellcode:
Stringgrid1.Cells[1, i] := StringReplace(Stringgrid1.Cells[1, i],'Datum',Stringgrid1.Cells[2, i],[rfReplaceAll, rfIgnoreCase]);
Das ist aber zu umständlich, hat aber funktioniert.

Freundliche Grüße
Aaron

aaron 14. Apr 2008 15:04

Re: Datum mit Datum austauschen
 
Zitat:

Willst du den Text komplett mit Datum speichern,
und dann das Datum ersetzen ?
Ja.
Freundliche Grüße
Aaron

aaron 15. Apr 2008 11:27

Re: Datum mit Datum austauschen
 
Zitat:

Zitat von hoika
Hallo,
Ein Ansatz wäre das Aufsplitten des Textes über eine StringList
(Separator wäre das Leerzeichen) und das Prüfen der einzelnen Strings
per TryStrToDate (Jedi ?)
oder die TryStrToDate selberbauen per
Delphi-Quellcode:
try
  StrToDate();
except
end;
order per Val

Dann kann dieser Datums-String ersetzt werden
und per StringList.Text hats du wieder deinen Satz.

Hallo Heiko,
das mit dem austauschen habe ich verstanden nur wie muss ich das mit den Leerzeichen machen?
Ich meine das Auslesen des Datums?

Grüße
Aaron

hoika 15. Apr 2008 12:07

Re: Datum mit Datum austauschen
 
Hallo,

sl: TStringList;

Delphi-Quellcode:
sl.Delimiter:= ' ';
sl.DelimitedText:= 'Das ist ein Text';
-> in sl.Items hast du jetzt 4 Strings


Heiko

mkinzler 15. Apr 2008 12:09

Re: Datum mit Datum austauschen
 
Eher
Delphi-Quellcode:
sl: TStrings;

sl := TStringList.Create;
sl.Delimiter:= ' ';
sl.DelimitedText:= 'Das ist ein Text';

hoika 15. Apr 2008 12:11

Re: Datum mit Datum austauschen
 
Ha,

auch ein Fehler DelimiteText -> DelimitedText ;)


Heiko

mkinzler 15. Apr 2008 12:12

Re: Datum mit Datum austauschen
 
Sch... Tippfehler

BTW. .StrictDelimiter := False sollte reichen

aaron 15. Apr 2008 21:57

Re: Datum mit Datum austauschen
 
Hallo und danke für eure Antworten.
Jetzt muss ich das nur noch zusammen bekommen.
freundliche Grüße
Aaron

aaron 16. Apr 2008 23:28

Re: Datum mit Datum austauschen
 
Hallo
ich habs mit euren Beispielen nicht hinbekommen, habe ein Beispiel gefunden mit dem ich schonmal aus einem String Zahlen extrahieren kann:

Delphi-Quellcode:
type
  TCharSet = set of Char;

function StripNonConforming(const S: string;
  const ValidChars: TCharSet): string;
var
  DestI: Integer;
  SourceI: Integer;
begin
  SetLength(Result, Length(S));
  DestI := 0;
  for SourceI := 1 to Length(S) do
    if S[SourceI] in ValidChars then
    begin
      Inc(DestI);
      Result[DestI] := S[SourceI]
    end;
  SetLength(Result, DestI)
end;

function StripNonNumeric(const S: string): string;
begin
  Result := StripNonConforming(S, ['0'..'9'])
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
showmessage(StripNonConforming('TEST TEST 12.11.2008 Test Test',['0'..'9']));
end;
Nun müßte ich nur noch wissen wie ich daraus wieder ein Datum machen kann.



Freundliche Grüße
Aaron

aaron 17. Apr 2008 01:23

Re: Datum mit Datum austauschen
 
Hallo,
ich habe es nun so gemacht, leider funktioniert das nicht sobald auch nur ein Punkt im String steht.
Wenn nur ein Datum drinnen steht funktioniert es.

Delphi-Quellcode:
sl := TStringList.Create;
sl.DelimitedText:= StringGrid1.Cells[1, StringGrid1.Row];
sl.DelimitedText := StripNonConforming(sl.DelimitedText, ['0'..'9','.']);
if StrToDate(sl.DelimitedText) = Date then begin
StringGrid1.Cells[1, StringGrid1.Row] := StringReplace(StringGrid1.Cells[1, StringGrid1.Row],sl.DelimitedText,StringGrid1.Cells[2, StringGrid1.Row],[rfReplaceAll, rfIgnoreCase]);
Was mache ich falsch oder bin ich auf einem komplett falschen Weg?

Freundliche grüße
Aaron

aaron 17. Apr 2008 10:27

Re: Datum mit Datum austauschen
 
Hallo,
sorry, ich weiß es ist unhöflich nach so kurzer Zeit zu pushen, leider brauche ich ganz, ganz superdringend eine Antwort bzw. Hilfe.

Habe auch hiermit rumprobiert, leider ohne Ergolg:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var d,d1: String;
    S: TDateTime;
begin
d:=(StripNonConforming('TEST TEST 12.11.2055 Test.',['0'..'9']));
d1:=Copy(d,1,2)+'.'+Copy(d,3,2)+'.'+Copy(d,5,2);
s:=StrToDate(d1);
ShowMessage(FormatDateTime('ddmmyyyy',s));
end;
Zitat:

Zitat von hoika
Hallo,

der Text sollte intern ohne das Datum (nur als Platzhalter)
gespeichert sein. Das Datum wird extra gespeichert.
Beim Füllen des StringGrids wird dann der Text zusammengebaut.

Das geht leider auch nicht weil das Datum mitten im Text stehen kann (an keiner festen Stelle)

Freundliche Grüße
Aaron

aaron 18. Apr 2008 12:48

Re: Datum mit Datum austauschen
 
Hilfe !!!
:-)

tomsel 18. Apr 2008 13:24

Re: Datum mit Datum austauschen
 
Ich hätte da mal einen ganz anderen vorschlag. Im Kern benötigst du ja nur die Position eines in einem String vorkommenden Datums, damit kannst du dann das alte Datum entfernen und ein neues einfügen.

Ersetze in einer Kopie deiner Zeichenkette alle numerischen Zeichen durch ein einheitliches Zeichen, z.Bsp. "0". Dann kommt an der Stelle, wo vorher das Datum stand etwas heraus wie: "00.00.0000".

Danach kannst du dann ganz einfach suchen mit
Delphi-Quellcode:
iPos := Pos('00.00.0000', sKopieVonMeinString);
Durch
Delphi-Quellcode:
System.Delete(sMeinString, iPos, 10)
löschst du das alte Datum und mit
Delphi-Quellcode:
System.Insert(sDasDatum, sMeinString, iPos)
fügst du das neue Datum an der gleichen Stelle ein.

Gruß

marabu 18. Apr 2008 13:47

Re: Datum mit Datum austauschen
 
Hallo,

hier noch eine Denkhilfe:

Delphi-Quellcode:
function FindDate(const text: string; var position: Integer): Boolean;
var
  iOffs, iPos: Integer;
  dt: TDateTime;
begin
  iOffs := Pred(Pos(DateSeparator, ShortDateFormat));
  while position > 0 do
  begin
    position := {StrUtils.}PosEx(DateSeparator, text, position);
    if position = 0
      then Break
      else iPos := position - iOffs;
    if TryStrToDate(Copy(text, iPos, Length(ShortDateFormat)), dt)
      then Break
      else position := Succ(position)
  end;
  Result := position > 0;
  position := iPos;
end;
Ich habe so getestet:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i, iPos: Integer;
begin
  with Memo do
    for i := 0 to Pred(Lines.Count) do
    begin
      iPos := 1;
      if FindDate(Lines[i], iPos) then
        Lines[i] := {StrUtils.}StuffString(Lines[i], iPos, Length(ShortDateFormat), DateToStr(Now));
    end;
end;
Grüße vom marabu

aaron 18. Apr 2008 14:48

Re: Datum mit Datum austauschen
 
DANKE, DANKE, DANKE!!!
Freundliche Grüße
Aaron


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz