![]() |
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 |
Re: Datum mit Datum austauschen
nein, mit stringreplace kannst du kein TDateTime ersetzen.
|
Re: Datum mit Datum austauschen
Du kannst doch die Zelle direkt ansteuern
|
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 |
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 |
Re: Datum mit Datum austauschen
Du kannst obigen Code dementsprechend anpassen.
|
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:
order per Val
try
StrToDate(); except end; Dann kann dieser Datums-String ersetzt werden und per StringList.Text hats du wieder deinen Satz. Heiko |
Re: Datum mit Datum austauschen
Hallo...
also ich habe es so gemacht:
Delphi-Quellcode:
aber irgendwie werden nun alle Zeilen ersetzt.
Stringgrid1.Cells[1, i]:= FormatDateTime('dd.mm.yyyy', Stringgrid1.DateTimePicker.Date);
Früher habe ich immer das Wort Datum durch das DateTimePickerdatum ersetzt.
Delphi-Quellcode:
Das ist aber zu umständlich, hat aber funktioniert.
Stringgrid1.Cells[1, i] := StringReplace(Stringgrid1.Cells[1, i],'Datum',Stringgrid1.Cells[2, i],[rfReplaceAll, rfIgnoreCase]);
Freundliche Grüße Aaron |
Re: Datum mit Datum austauschen
Zitat:
Freundliche Grüße Aaron |
Re: Datum mit Datum austauschen
Zitat:
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 |
Re: Datum mit Datum austauschen
Hallo,
sl: TStringList;
Delphi-Quellcode:
-> in sl.Items hast du jetzt 4 Strings
sl.Delimiter:= ' ';
sl.DelimitedText:= 'Das ist ein Text'; Heiko |
Re: Datum mit Datum austauschen
Eher
Delphi-Quellcode:
sl: TStrings;
sl := TStringList.Create; sl.Delimiter:= ' '; sl.DelimitedText:= 'Das ist ein Text'; |
Re: Datum mit Datum austauschen
Ha,
auch ein Fehler DelimiteText -> DelimitedText ;) Heiko |
Re: Datum mit Datum austauschen
Sch... Tippfehler
BTW. .StrictDelimiter := False sollte reichen |
Re: Datum mit Datum austauschen
Hallo und danke für eure Antworten.
Jetzt muss ich das nur noch zusammen bekommen. freundliche Grüße Aaron |
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:
Nun müßte ich nur noch wissen wie ich daraus wieder ein Datum machen kann.
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; Freundliche Grüße Aaron |
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:
Was mache ich falsch oder bin ich auf einem komplett falschen Weg?
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]); Freundliche grüße Aaron |
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:
Freundliche Grüße Aaron |
Re: Datum mit Datum austauschen
Hilfe !!!
:-) |
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:
Durch
iPos := Pos('00.00.0000', sKopieVonMeinString);
Delphi-Quellcode:
löschst du das alte Datum und mit
System.Delete(sMeinString, iPos, 10)
Delphi-Quellcode:
fügst du das neue Datum an der gleichen Stelle ein.
System.Insert(sDasDatum, sMeinString, iPos)
Gruß |
Re: Datum mit Datum austauschen
Hallo,
hier noch eine Denkhilfe:
Delphi-Quellcode:
Ich habe so getestet:
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;
Delphi-Quellcode:
Grüße vom marabu
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; |
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