Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nummerierung (https://www.delphipraxis.net/75890-nummerierung.html)

robinWie 26. Aug 2006 16:50


Nummerierung
 
Hallo,
wer kennt das nicht. Man will etwas Nummerieren aber der Explorer zeigt, bei einfacher nummerierung, die Dateien so an:
Code:
1Datei
10Datei
11Datei
2Datei
3Datei
4Datei
5Datei
6Datei
7Datei
8Datei
9Datei
Das hat mich sehr gestört. Da habe ich einen Algo geschrieben der das ganze so Nummeriert:
Code:
01. Datei
02. Datei
03. Datei
04. Datei
05. Datei
06. Datei
07. Datei
08. Datei
09. Datei
10. Datei
11. Datei
Hier iser
Leider unterstüzt er "nur" maximal 1.000.000 Einträge
Delphi-Quellcode:
function GetNumber(Position, Max: integer): string;
var
 NOM: string;
begin
      if Length(IntToStr(Position+1))=1 then begin
         if Max >= 100000 then
            NOM:='00000'+IntToStr(Position+1)+'. ';
         if (Max>=10000) and (Max <100000) then
            NOM:='0000'+IntToStr(Position+1)+'. ';
         if (Max>=1000) and (Max<10000) then
            NOM:='000'+IntToStr(Position+1)+'. ';
         if (Max>=100) and (Max<1000) then
            NOM:='00'+IntToStr(Position+1)+'. ';
         if (Max>=10) and (Max<100) then
            NOM:='0'+IntToStr(Position+1)+'. ';
         if (Max>=1) and (Max<10) then
            NOM:=IntToStr(Position+1)+'. ';
       end;
       if Length(IntToStr(Position+1))=2 then begin
         if Max >=10000 then
            NOM:='0000'+IntToStr(Position+1)+'. ';
         if (Max>=10000) and (Max <10000) then
            NOM:='000'+IntToStr(Position+1)+'. ';
         if (Max>=1000) and (Max<10000) then
            NOM:='00'+IntToStr(Position+1)+'. ';
         if (Max>=100) and (Max<1000) then
            NOM:='0'+IntToStr(Position+1)+'. ';
         if Max<100 then
            NOM:=IntToStr(Position+1)+'. ';
       end;
       if Length(IntToStr(Position+1))=3 then begin
         if Max>=100000 then
            NOM:='000'+IntToStr(Position+1)+'. ';
         if (Max>=10000) and (Max <100000)then
            NOM:='00'+IntToStr(Position+1)+'. ';
         if (Max>=1000) and (Max<10000) then
            NOM:='0'+IntToStr(Position+1)+'. ';
         if Max<1000 then
            NOM:=IntToStr(Position+1)+'. ';
       end;
       if Length(IntToStr(Position+1))=4 then begin
         if Max>=100000 then
            NOM:='00'+IntToStr(Position+1)+'. ';
         if (Max>=10000) and (Max<100000) then
            NOM:='0'+IntToStr(Position+1)+'. ';
         if (Max>=1000) and (Max<10000) then
            NOM:=IntToStr(Position+1)+'. ';
       end;
       if Length(IntToStr(Position+1))=5 then begin
         if Max>=100000 then
          NOM:='0'+IntToStr(Position+1)+'. ';
       end;
       if Length(IntToStr(Position+1))=6 then begin
         if Max>=100000 then
            NOM:=IntToStr(Position+1)+'. ';
       end;
  Result := Nom;
end;

Balu der Bär 26. Aug 2006 16:54

Re: Nummerierung
 
Ähm nichts gegen deinen Algorithmus, aber gibts dafür nicht Quick- oder BubbleSort die es auch so sortieren? :gruebel:


http://www.delphipraxis.net/internal_redirect.php?t=344

Daniel B 26. Aug 2006 16:54

Re: Nummerierung
 
Erspare Dir doch die mords Schreibarbeit. Lass die Zahl hochzählen wie sie mag und bevor du es dem Dateinamen zuweist, lass dies noch drüber laufen: http://www.delphipraxis.net/internal...ight=tausender

Flocke 26. Aug 2006 16:57

Re: Nummerierung
 
So ist's ein bisschen kürzer :wink:
Delphi-Quellcode:
function GetNumber(Position, Max: integer): string;
begin
  Result := Format('%.' + IntToStr(Length(IntToStr(Max))) + 'd', [Position]);
end;
// Roter Kasten - mal wieder zu spät :stupid:

Mackhack 26. Aug 2006 17:34

Re: Nummerierung
 
Sehe ich das falsch oder will er Dateinamen mit Zahlen davor setzen? Das hat doch nix mit 1000er Trennzeichen zu tun was die anderen gepostet haben.

Hm.. *Gruebel*

Jürgen Thomas 26. Aug 2006 18:30

Re: Nummerierung
 
Zitat:

Zitat von Mackhack
Sehe ich das falsch oder will er Dateinamen mit Zahlen davor setzen? Das hat doch nix mit 1000er Trennzeichen zu tun was die anderen gepostet haben.

Wo sind hier Tausender-Trenner? Der Format-Befehl enthält doch 'nur' eine Präzision. Aber er ist trotzdem seltsam formuliert:
Zitat:

Zitat von Flocke
Delphi-Quellcode:
Result := Format('%.' + IntToStr(Length(IntToStr(Max))) + 'd', [Position]);
end;

2x IntToStr??? Aber die Format-Funktion ermöglicht es auch, mit '*' die Präzision direkt zu übergeben:
Delphi-Quellcode:
Result := Format('%.*d_Datei', [Max, Position]);
end;
Das liefert bei 'Max=3' und 'Position=7' den Dateinamen '007_Datei'. OK? Jürgen

Flocke 26. Aug 2006 18:59

Re: Nummerierung
 
Zitat:

Zitat von Jürgen Thomas
OK? Jürgen

Er wollte aber wohl in "Max" die größte mögliche Zahl übergeben, und "Length(StrToInt(Max))" ist die Länge eben dieser größten Zahl.

Jürgen Thomas 26. Aug 2006 19:03

Re: Nummerierung
 
Zitat:

Zitat von Flocke
Er wollte aber wohl in "Max" die größte mögliche Zahl übergeben, und "Length(StrToInt(Max))" ist die Länge eben dieser größten Zahl.

Aua... aber mein Format-Befehl ist trotzdem schöner, müsste aber natürlich geändert werden.

Ich bin vor allem über doppeltes 'IntToStr' und die '1000er Trennzeichen' gestolpert. Tschuldige!

Jürgen

Flocke 26. Aug 2006 19:54

Re: Nummerierung
 
Zitat:

Zitat von Jürgen Thomas
Tschuldige!

Dafür gibt's doch überhaupt keinen Grund :wink:
Außerdem führt dein Vorschlag mit '%.*d' zu einer noch kürzeren Lösung.

robinWie 27. Aug 2006 09:58

Re: Nummerierung
 
Zitat:

So ist's ein bisschen kürze
Delphi-Quellcode:
function GetNumber(Position, Max: integer): string;
begin
  Result := Format('%.' + IntToStr(Length(IntToStr(Max))) + 'd', [Position]);
end;

// Roter Kasten - mal wieder zu spät
Warum einfach machen wenns auch schwer geht :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
Seite 1 von 2  1 2      

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