Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stringzerlegung in Schleife (https://www.delphipraxis.net/174127-stringzerlegung-schleife.html)

RWarnecke 5. Apr 2013 15:58

AW: Stringzerlegung in Schleife
 
Von welchem Typ ist Field[1] und Field[2]? Dann haste Doch schon den Fehler bei der Übergabe an ed1.text;

Edit:
Um eine Datum zu zerlegen in Tag, Monat und Jahr, würde ich mir den Befehl DecodeDate anschauen. Dann kannste Dir die ganzen while-Schleifen sparen.

p80286 5. Apr 2013 16:13

AW: Stringzerlegung in Schleife
 
Zitat:

Zitat von frankistreich (Beitrag 1210161)
Delphi-Quellcode:
 
while s[i]<>'.' do
  begin
    s3:=s3+s[i];
    inc(i);
bei diesen zeilen bleibt er hängen und macht dort endlos weiter

Und was steht in
Delphi-Quellcode:
s
? wenn da als Datum '' oder '20120103' oder '03-03-88' steht, ist es klar das es rummst.

egal welcher Inhalt vorhanden ist, so wäre es besser:
]
Delphi-Quellcode:
 
while (i<=length(s)) and (s[i]<>'.') do
  begin
    s3:=s3+s[i];
    inc(i);
Gruß
K-H

frankistreich 5. Apr 2013 16:37

AW: Stringzerlegung in Schleife
 
mit einzelschritten läuft er ohne probleme jetzt durch.
jedoch kommt beim koplettdurchlauf die fehlermeldung: 030403040404 ist kein gültiger integerwert
-> d.h. er zerlegt immernoch alle daten aus der datenbank, bevor er den ersten eintrag im stringgrid macht.


danke tritzdem schon mal

Furtbichler 5. Apr 2013 16:52

AW: Stringzerlegung in Schleife
 
Zitat:

Zitat von p80286 (Beitrag 1210168)
egal welcher Inhalt vorhanden ist, so wäre es besser:

Jupp, aber dann lieber (Geschmackssache) so:
Delphi-Quellcode:
 
for i:=1 to length(s) do
  if s[i]='.' then
    break
  else
    s3:=s3+s[i];
Oder so:
Delphi-Quellcode:
i := pos('.',s);
if i<1 then
  i := length(s)+1;
s3 := Copy(s,1,i-1);

p80286 5. Apr 2013 17:03

AW: Stringzerlegung in Schleife
 
Zitat:

Zitat von frankistreich (Beitrag 1210178)
mit einzelschritten läuft er ohne probleme jetzt durch.

Schön
Zitat:

Zitat von frankistreich (Beitrag 1210178)
jedoch kommt beim koplettdurchlauf die fehlermeldung: 030403040404 ist kein gültiger integerwert
-> d.h. er zerlegt immernoch alle daten aus der datenbank, bevor er den ersten eintrag im stringgrid macht.

Dann funktioniert das auch nicht in Einzelschritten!

Wo tritt dieser Fehler auf (Sourcecode).

@Furtbichler
Ich denke, das kommt darauf an wie Deine kleinen Grauen Zellen ticken. "Mach solange i nicht größer als die Länge und ungleich einem Punkt ist.."
ist etwas anderes als
" hole die Position von Punkt"
"Wenn diese kleiner eins ist kopiere alles, sonst den string von Postion eins bis Position minus 1 "
:)

Gruß
K-H

Sir Rufo 5. Apr 2013 17:08

AW: Stringzerlegung in Schleife
 
Ich weiß ja nicht warum du dich mit dem Zerlegen des Strings herumschlägst (Masochist :gruebel:)

ABer ein Datum kann man sehr schön mit den Delphi-Referenz durchsuchenDateUtils in Tag, Monat, Jahr zerlegen.
Einfach den String in ein Delphi-Referenz durchsuchenTDateTime konvertieren Delphi-Referenz durchsuchenStrToDate/Delphi-Referenz durchsuchenStrToDateDef/Delphi-Referenz durchsuchenVarToDateTime und dann damit weiterarbeiten.

Delphi-Referenz durchsuchenDecodeDateDelphi-Referenz durchsuchenDayOfDelphi-Referenz durchsuchenMonthOfDelphi-Referenz durchsuchenYearOf

frankistreich 5. Apr 2013 19:50

AW: Stringzerlegung in Schleife
 
Hab es jetzt anders gelöst. Geht jetzt alles....trotzdem danke für die mühen

Delphi-Quellcode:
procedure Tfmuanzeigen.darstellen;
  var x1,x2,y1,t:integer;
      s,s1,s2,s3:string;
begin
qbefehl.Close;
  qbefehl.SQL.Clear;
  qbefehl.SQL.Add('select ma.mid,urlaub.beginn,rtrim(urlaub.dauer),urlaub.unr from ma '+
                  'inner join urlaub on ma.mid = urlaub.mid '+
                  'where ma.aid = '+quotedstr(a)+' order by ma.mid asc');
qbefehl.Open;

qanzahl.Close;
  qanzahl.SQL.Clear;
  qanzahl.SQL.Add('select count(Urlaub.UNr) as anzahl from Urlaub '+
                  'inner join ma on Urlaub.MId = ma.MId '+
                  'where AId = '+quotedstr(a));
qanzahl.Open;
qbefehl.first;

while not qbefehl.eof do
begin

  S:=qbefehl.Fields.Fields[1].AsString; //Datum
  t:=qbefehl.fields.fields[2].asinteger;//Dauer

s1 := Copy(s, 0, 2);
s2 := Copy(s, 4, 2);
s3 := Copy(s, 7, 4);

 x1:=strtoint(s1);
 x2:=strtoint(s1);

 if s2 = cbmonat.Text then begin
  for x1:=strtoint(s1) to x1+t-1 do begin
     y1:=qbefehl.fields.fields[0].asinteger;
     sg.Cells[x2,y1]:='XXXXXXXX';
     inc(x2);
   end;
  end;
  qbefehl.next;
 end;
end;

Furtbichler 5. Apr 2013 22:57

AW: Stringzerlegung in Schleife
 
Zitat:

Zitat von p80286 (Beitrag 1210183)
@Furtbichler
Ich denke, das kommt darauf an wie Deine kleinen Grauen Zellen ticken...

Gott-sei-Dank nicht. Es kommt auf Klarheit und Einfachheit an, also wie man auf das Ergebnis kommt. Und das ist in engen Grenzen auch Geschmacksache, aber in ziemlich engen Grenzen.

HiWieGehts 6. Apr 2013 07:03

AW: Stringzerlegung in Schleife
 
frankistreich gefällt mir! Stellt eine Frage, will verm. dass man ihm hilft und ignoriert alle Tipps.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.
Seite 2 von 2     12   

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