Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string inkrementieren (https://www.delphipraxis.net/160798-string-inkrementieren.html)

Cogito 1. Jun 2011 10:00

Delphi-Version: 2010

string inkrementieren
 
Hallo zusammen,

wahrscheinlich ist es nur eine Bagatelle aber ich suche nach einer Möglichkeit, eine Zahl, die in einem string gespeichert ist, zu inkrementieren.
Beispiel:

ZahlAlsString := '0470726';

die nächste Zahl sollte dann '0470727' sein. Das Problem hierbei für mich ist, wenn ich die Zahl als Integer umwandle verliere ich die führende Null. Da diese Zahl Bestandteil eines Barcodes sein soll muss die führende Null bleiben.
Wie mache ich sowas, gibt's eine fertige Funktion oder hat jemand eine selbst geschriebene für mich?

mkinzler 1. Jun 2011 10:03

AW: string inkrementieren
 
Dann musst du die 0 bei der Rückwandlung in einen string halt wieder anfügen ( Format)

Neutral General 1. Jun 2011 10:04

AW: string inkrementieren
 
merk dir wie viele Stellen der Barcode hatte. Dann umwandeln, erhöhen und dann mit Format und führenden 0en zurückwandeln.

Delphi-Quellcode:
function IncCode(Code: String): String;
var len: Integer;
    Val: Integer;
begin
  len := Length(Code);
  Val := StrToInt(Code);
  inc(Val);
  Result := Format('%.'+IntToStr(Len)+'d',[Val]);
end;

Coffeecoder 1. Jun 2011 10:06

AW: string inkrementieren
 
Zitat:

Zitat von Cogito (Beitrag 1104062)
Wie mache ich sowas, gibt's eine fertige Funktion oder hat jemand eine selbst geschriebene für mich?

Ich habe eine Methode geschrieben um eine Zahl mit führende Nullen zu ergänzen.

Zitat:

Zitat von mkinzler (Beitrag 1104063)
Dann musst du die 0 bei der Rückwandlung in einen string halt wieder anfügen ( Format)

Das geht auch.
Würde dein String in ein Integer casten und dann inkrementieren und dann zurückwandeln.
Schreib mir ne PM dann schick ich dir meine Methode. Ausser jmd will die hier sehen?!

mkinzler 1. Jun 2011 10:09

AW: string inkrementieren
 
Die wäre u.U. auch für andere interessant, obwohl Format() das ja auch kann

mleyen 1. Jun 2011 10:13

AW: string inkrementieren
 
..
Delphi-Quellcode:
procedure incBCStr(var AStr: string);
var
  i, l: Integer;
begin
  l := Length(AStr);
  AStr := IntToStr(StrToInt64(AStr)+1);
  for i := Length(AStr) to l-1 do
    AStr := '0' + AStr;
end;

Coffeecoder 1. Jun 2011 10:14

AW: string inkrementieren
 
Zitat:

Zitat von mkinzler (Beitrag 1104071)
Die wäre u.U. auch für andere interessant, obwohl Format() das ja auch kann

OK :) Ich poste die dann wenn ich an meinem Rechner sitze.

Coffeecoder 1. Jun 2011 10:15

AW: string inkrementieren
 
Zitat:

Zitat von mleyen (Beitrag 1104073)
..
Delphi-Quellcode:
procedure incBCStr(var AStr: string);
var
  i, l: Integer;
begin
  l := Length(AStr);
  AStr := IntToStr(StrToInt64(AStr)+1);
  for i := Length(AStr) to l-1 do
    AStr := '0' + AStr;
end;

Ja meine geht auch in die Richtung. Ich poste sie dann heute abend.

blackfin 1. Jun 2011 10:24

AW: string inkrementieren
 
Ich habe dafür eine Funktion, die str_pad von php nachbildet.
Dabei gibt man an, auf wieviel Zeichen der String aufgefüllt werden soll (pad_size), mit welcher zeichenfolge aufgefüllt werden soll(pad_string) und dann noch, ob links oder rechts aufgefüllt werden soll (pad_type 0/1)

Delphi-Quellcode:
// pad a string to pad_size with pad_string characters (php-like)
function str_pad(const Input : string;
                 pad_size : integer;
                 const pad_string : string = '0';
                 const pad_type : Integer = 0) : string ;
var
  i : integer;
  dif : Integer ;
  c: char ;
begin
  Result := Input;
  if Length(Input) < pad_size then
  begin
    dif := pad_size - Length(Input) ;
    SetLength(Result,pad_size) ;

    case pad_type of

        // STR_PAD_LEFT
        0:
          begin
             for i := 1 to dif do
             begin
                 if i <= Length(pad_string) then c := pad_string[i]
                 else c := pad_string[Length(pad_string)] ;
                 Result[i] := c ;
             end;

             try
               for i := dif+1 to pad_size do Result[i] := Input[i-dif] ;
             except
             end;
          end;

        // STR_PAD_RIGHT
        1:
          begin
             for i := Length(Input)+1 to pad_size do
             begin
                 if i-dif <= Length(pad_string) then c := pad_string[i-dif]
                 else c := pad_string[Length(pad_string)] ;
                 Result[i] := c ;
             end;

             try
               for i := 1 to dif do Result[i] := Input[i] ;
             except
             end;
          end;
    end;

  end;
end;

Sir Rufo 1. Jun 2011 10:25

AW: string inkrementieren
 
Zitat:

Zitat von Neutral General (Beitrag 1104066)
merk dir wie viele Stellen der Barcode hatte. Dann umwandeln, erhöhen und dann mit Format und führenden 0en zurückwandeln.

Delphi-Quellcode:
function IncCode(Code: String): String;
var len: Integer;
    Val: Integer;
begin
  len := Length(Code);
  Val := StrToInt(Code);
  inc(Val);
  Result := Format('%.'+IntToStr(Len)+'d',[Val]);
end;

Das geht doch so viel schicker:
Delphi-Quellcode:
Format( '%.*d', [ Len, Val ] )
.
Delphi-Referenz durchsuchenSysUtils.Format


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz