Autor |
Beitrag |
TheHuette
      
Beiträge: 81
|
Verfasst: Mi 03.11.04 13:50
Hi!
Habe folgendes, kleines Problem:
Ich möchte einen String mit führenden Nullen (z.B. '0001') in einen Integer-Wert umwandeln und dann damit rechnen (z.B. um 1 erhöhen), ohne dass die Nullen "verloren" gehen. Es soll aber keine feste Anzahl an Stellen/Nullen geben. D.h. wenn ich 001 reinbekomme und diesen String um 1 erhöhe, möchte ich 002 rausgeben. Bei 009 möchte ich aber 010 rausgeben und bei 9 die 10.
Jemand einen Tip, wie ich das anstellen kann?
Edit: Wenn ich mein Problem mittlerweile richtig überschaut habe, bräuchte ich also eine StrToInt-Funktion, die die führenden Nullen nicht abschneidet.
Zuletzt bearbeitet von TheHuette am Mi 03.11.04 13:58, insgesamt 1-mal bearbeitet
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 03.11.04 13:57
Da wirst du dir wohl eine Funktion schreiben müssen, die dir das aufbereitet. Eine automatische Funktion kenne ich nicht.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 03.11.04 14:03
Beispiel dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| function StrFillZero(Zahl: Integer; Laenge : Byte): String; begin result := IntToStr(Zahl); while length(result) < Laenge do begin result := '0' + result; end; end; |
Achtung, es sind noch keine Sicherheitsprüfungen drin. Auch wird nicht geprüft, was passiert, wenn die Zahl länger ist als die vorgegebene Länge.
Man kann natürlich in so eine Funktion auch noch das Hochzählen mit einbauen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 03.11.04 14:19
Wie wäre es mit FormatStrings aus der Delphi Hilfe?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 03.11.04 14:51
@Luckie und jasocul: Eure Beiträge beantworten nicht direkt das Problem, es geht ja darum wieder dieselbe Anzahl zu bekommen, ich glaube nicht, das es das Problem ist, wieder Nullen anzufügen.
@TheHuette: Oder?
Zur Lösung: Wenn du einen Integer-Wert hast, mit dem du rechnest ist es nicht möglich, in diesem auch die Anzahl der Nullen zu speichern. Heißt: So etwas wie eine StrToInt-Funktion mit Nullen kann es nicht geben.
Du musst also zuerst die Anzahl der Nullen feststellen, dann mit StrToInt und StrFillZero (von jasocul) arbeiten, und schließlich nach den eben geposteten Möglichkeiten die Nullen wiederherstellen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function getZeroCount(Eingabe: String): Byte; begin Result:=0; while (Eingabe[1]='0') do begin Inc(Result); Delete(Eingabe,1,1); end; end;
var ZeroCount: Byte; Zahl: Integer; begin ZeroCount:=getZeroCount(Dein_String); Zahl:=StrToInt(Dein_String); Neuer_String:=StrFillZero(Zahl,ZeroCount): end; |
Hoffe ist richtig...
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 03.11.04 15:14
Funktioniert spätestens dann nicht mehr, wenn die Zahl an sich länger wird. Also z.B. 99 -> 100 u.s.w.
Man könnte dann zwar anfangen, dies zu prüfen, aber das ist dann vielleicht doch ein bisschen viel Aufwand.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 03.11.04 15:19
jasocul hat folgendes geschrieben: | Funktioniert spätestens dann nicht mehr, wenn die Zahl an sich länger wird. Also z.B. 99 -> 100 u.s.w. |
Stimmt, hatte ich vergessen, ist aber einfach zu beheben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var ZeroCount: Byte; Zahl: Integer; begin ZeroCount:=getZeroCount(Dein_String); Zahl:=StrToInt(Dein_String); Neuer_String:=StrFillZero(Zahl,ZeroCount +Length(IntToStr(StrToInt(Dein_String)))-Length(Zahl)): end; |
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 03.11.04 15:44
Na ja, Geschmackssache.
Die Länge soll vorher und hinterher die selbe sein. Da würde es genügen, sich einfach die Länge des Strings zu merken. 
|
|
TheHuette 
      
Beiträge: 81
|
Verfasst: Mi 03.11.04 17:42
Hi!
Habe es mit dem Vergleich Length(eingehender String) > Length(ResultString) realisiert.
Dem ResultString werden dann so viele Nullen "vorgehängt" bis beide gleich lang sind (For...).
Das 0099 -> 0100 Problem hat sich dadurch irgendwie erübrigt. Kommt immer das raus, was ich haben will.
Danke für eure Hilfe.
MfG
Hütte
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 03.11.04 19:57
Eigentlich sollte das mit folgendem Befehl funktioneren:
Delphi-Quelltext 1:
| ZahlmitNullen := Format('%.*d', [BreiteDerZahl, EigentlicheZahl]); |
Für eine Erklärung siehe DOH bzgl. Format-Strings.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 03.11.04 21:54
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 03.11.04 22:08
Habsch zu spät gesehen und Editieren ging ja nicht, genausowenig, wie 2 Posts vom gleichen Author hintereinander schön aussehen. Allerdings müsste man noch erwähnen, dass er seine Operationen mit dem Teil "StrToInt" ausführen muss, so dass der Ausdruck einen Integer liefert. Wenn ein Float rauskommt, dann meckert der Compiler zwar nicht, aber Format bringt ne Exception wegen ungültigem Typ.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 04.11.04 09:06
Hatte in der OH auch schon gesucht, bevor ich meine Funktion vorgeschlagen hatte. Habe dort aber keinen Hinweis auf die führenden Nullen für die Formatierung gefunden. 
|
|
|