![]() |
AW: funktion erstellen... weiß nicht weiter
also ich habe es jetzt so gemacht. wobei ich allerdings nicht weiß ob "sort" richtig ist aber das kläre ich gleich.
jetzt will ich ja in meiner procedure die eine Zeile mit Sort austauschen. aber wie mach ich das? der meckert immer!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, j : Integer; //Position Buffer: String; begin for j:=0 to Memo1.Lines.count -2 do begin for i:=j +1 to Memo1.Lines.Count -1 do begin if Memo1.Lines[j] > Memo1.Lines[i] then //tauschen mit funkction Sort begin Buffer:= Memo1.Lines[j]; Memo1.Lines[j]:= Memo1.Lines[i]; Memo1.Lines[i]:= Buffer; end; end; end; end; function TForm1.CharToInt(AValue: String): Integer; var i: Integer; begin Result := -1; for i := 1 to Length(CharTable) do begin if AValue = Chartable[i] then begin Result := i; Break; end; end; end; function TForm1.Sort(ASrcA, ASrcD: String): Integer; var i: Integer; begin Result := 0; for i:=1 to Length(ASrcD) do begin if ASrcA > ASrcD then begin Result:= i+1 ; end else begin Result:= i-1; CharToInt(ASrcA[i]); CharToInt(ASrcD[i]); Break; end; end; end; |
AW: funktion erstellen... weiß nicht weiter
Wo meckert er? Wo wird Deine Funktion denn aufgerufen? Wozu dieses CharToInt statt Ord?
|
AW: funktion erstellen... weiß nicht weiter
sollte ich so machen.... also wenn ich sort mit Memo1.lines tausche dann meckert er. also sie soll da aufgerufen werden wo ich den quelltext kommentiert habe.
|
AW: funktion erstellen... weiß nicht weiter
Wer meckert? Der Compiler? Zeig doch mal den Quelltext, der da moniert wird, sonst kommen wir nicht weiter.
|
AW: funktion erstellen... weiß nicht weiter
Irgendwie scheint die Hilfe von DeddyH nicht sehr hilfreich zu sein.
wenn ich's richtig verstehe, soll die Zeile: "if Memo1.Lines[j] > Memo1.lines[i] then " dann z.B. lauten "if StrCompare(Memo1.Lines[j], Memo1.lines[i]) > 1 then " und StrCompare sollte dann z.B. so aussehen:
Delphi-Quellcode:
Die Funktion liefert 0, falls beide Strings gleich sind, 1 falls s1 > s2 und -1 falls s1 < s2.
function TForm1.StrCompare(const s1, s2: String): Integer;
var j, minLen: Integer; begin minLen := Length(s1); if Length(s2) < minLen then minLen := Length(s2); j := 1; result := 0; while (j <= minLen) and (result = 0) do begin if ord(s1[j]) < ord(s2[j]) then result := -1 else if ord(s1[j]) > ord(s2[j]) then result := 1 else result := 0; inc(j); end; end; |
AW: funktion erstellen... weiß nicht weiter
Vorkauen ist also hilfreicher (BTW: 'hal' und 'hallo' sind also gleich, kommt bei Dir zumindest raus)? Dann mach Du weiter, ich verabschiede mich.
|
AW: funktion erstellen... weiß nicht weiter
also bin jetzt bis dahin
Delphi-Quellcode:
er sortiert zwar aber nicht nach dem alphabet.
function TForm1.Sort(ASrcA, ASrcD: String): Integer;
var i: Integer; lResult: Integer; begin Result := 0; for i:=1 to Length(ASrcD) do begin for lResult:= CharToInt(ASrcD[i]) to CharToInt(ASrcA[i]) do OutputDebugString( PChar(ASrcD[i] + ' = ' + IntToStr(lResult)) ); begin if lResult > 0 then Result:= i+1; end; for lResult:= CharToInt(ASrcA[i]) to CharToInt(ASrcD[i]) do OutputDebugString( PChar(ASrcA[i] + ' = ' + IntToStr(lResult)) ); begin if lResult < 0 then Result:= i-1; end; |
AW: funktion erstellen... weiß nicht weiter
Du ermittelst doch Zahlenwerte aus den Buchstaben. Die kann man auch einfach von einander subtrahieren. Das macht allerdings auch nur solange Sinn, wie das Gesamtergebnis 0 ist, danach musst Du aus der Schleife raus, sonst überschreibst Du Dir das richtige Ergebnis ggf. mit einem falschen. Außerdem kann die Länge der Strings ja auch unterschiedlich sein, daher darf die Vergleichsschleife nur über die Länge des kürzeren laufen. Kommt da 0 bei heraus, ist der längere auch der größere.
|
AW: funktion erstellen... weiß nicht weiter
prinzip verstanden... mal gucken ob es auch in der praxis klappr:lol:
|
AW: funktion erstellen... weiß nicht weiter
zu DeddyH:
Also ich lerne von anderer Leute code mehr als aus Büchern. Damit (hal > hallo) oder (hal < hallo), muss man erst mal entscheiden, was sinnvoll wäre. Eine Wahl wäre z.B. so:
Delphi-Quellcode:
zu Biby90:
function TForm1.StrCompare(s1, s2: String): Integer;
var j, minLen: Integer; begin minLen := Length(s1); if Length(s2) < minLen then minLen := Length(s2); j := 1; result := 0; while (j <= minLen) and (result = 0) do begin if ord(s1[j]) < ord(s2[j]) then result := -1 else if ord(s1[j]) > ord(s2[j]) then result := 1 else result := 0; inc(j); end; if (result = 0) and (Length(s2) > minLen) then result := -1; if (result = 0) and (Length(s1) > minLen) then result := 1; end; Du brauchst kein ChartoInt. Die Funktion ord macht das schon. Zum Vergleichen musst Du synchron durch beide Strings laufen: (j = 1..minLen) bis einer von beiden zu Ende ist. Sobald ein Unterschied in der Zeichenfolge besteht, kann die Funktion beendet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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