![]() |
Hochzählen Verständnisfrage
Hallo,
ich bin am verzeifeln. :wall: will eigentlich nur einen Wert erhöhen, bekomme aber immer Probleme wenn der letzte Char eine 9 oder ein z ist... Ich poste mal meine function, vielleicht findet einer den Fehler gleich :oops:
Delphi-Quellcode:
function Zaehlen(s:String):String;
var C:Char; Zahl:String; i:integer; begin if s<>'' then begin i:=Length(s); c:=S[i]; //Wenn noch ein hinzugezählt werden kann if c in ['0'..'8','A'..'Y','a'..'y'] then begin inc(c); Zahl:=C; result:=copy(S,1,i-1)+ C; end; //Wenn Z oder 0 while c in ['9'] do begin if c in ['9'] then begin Zahl:=Zahl+'0'; end; dec(i); c:=S[i]; result:=copy(s,1,i)+Zahl; end; while c in ['Z','z'] do begin if c in ['Z'] then begin zahl:=Zahl+'A'; end; if c in ['z'] then begin zahl:=Zahl+'a'; end; dec(i); c:=S[i]; result:=copy(s,1,i)+Zahl; end; end; end; |
Re: Hochzählen Verständnisfrage
Hallo,
Könntest du vielleicht ein wenig beschreiben, was genau die Funktion machen sollte? |
Re: Hochzählen Verständnisfrage
Mir schaut das ganze etwas komisch aus. Was willst du mit den Quelltext bezwecken? Versuch mal folgende Tabelle für mich zu füllen, damit ich versteh, was du meinst
Code:
[Edit]Da war wohl wer schneller ;-) :cheers:[/Edit]
Eingabe Ausgabe Erwartete Ausgabe
--------------------------------------------------- '123' '124' ??? 'abc' 'abd' ??? 'xyz' 'xya' ??? '789' '780' ??? |
Re: Hochzählen Verständnisfrage
OK,
ich habe ein EditFeld indem ein Wert immer um eins hochzezähöt werden soll: Bsp: 1009 soll 1010 sein 100Z soll 101A sein Bei den Werten 0 bis 8 und a bis y klappt das, nur nicht wenn er den vorherigen Wert auch noch zählen soll. Es sollte einfach Alphanumerisch gezählt werden können.... |
Re: Hochzählen Verständnisfrage
Ich würde den String zunächst in eine Zahl wandeln, inkrementieren und dann formatiert ausgeben.
[edit] Ach nee, da käme ein anderes Ergebnis heraus, sry. [/edit] |
Re: Hochzählen Verständnisfrage
Häh :gruebel:
wie meinste das????? |
Re: Hochzählen Verständnisfrage
Inkrementiere jedes s[i] separat, wenn s[1] überlauft, pack eine 1 bzw ein a vor den String.
Gruß Gammatester |
Re: Hochzählen Verständnisfrage
Ich hab mal den Quelltext umgeschrieben, so dass deine beiden Beispiele funktionieren. Ob alles wirklich so funktioniert, wie du es willst, weiß ich nicht:
Delphi-Quellcode:
(PS: deine Codeformatierung ist nicht ganz optimal ^^, musste es erst umformatieren um die Funktionalität zu erkennen)
function Zaehlen(s: string): string;
var c: char; i: integer; begin if s <> '' then begin i := length(s); c := s[i]; if c in ['0'..'8', 'A'..'Y', 'a'..'y'] then begin inc(c); s[i] := c; end; c := s[i]; while c in ['9', 'z', 'Z'] do begin if c in ['z', 'Z'] then s[i] := 'A' else s[i] := '0'; dec(i); if i < 1 then break; // da musst du noch etwas rumbasteln, dass auch '999' usw. funktioniert c := s[i]; if not (c in ['9', 'z', 'Z']) then begin inc(c); s[i] := c; break; end; end; end; result := s; end; |
Re: Hochzählen Verständnisfrage
Wow danke... haste mir schwer weitergeholfen :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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