Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String hochzählen (https://www.delphipraxis.net/76505-string-hochzaehlen.html)

Noteip 5. Sep 2006 15:09


String hochzählen
 
Hallo DPler,

im Prinzip weiß ich nicht, wie ich mein Problem in die richtigen Worte fassen soll, um dannach zu suchen, deshalb dieser Thread.

Ich bekomme von einer Anwendung Dateien geliefert, diese Dateien importiere ich in eine Notes-Datenbank. Soweit ist das auch kein Problem. Aber jetzt kommts ...

Auf einem FTP-Server liegen z.B. folgende Dateien:
TAXASFCX.DAT
TAXASFCY.DAT
TAXASFCZ.DAT
TAXASFDA.DAT
TAXASFDB.DAT

Pro stunde kommt eine Datei hinzu. So nun zu meinem Problem. Nehmen wir an, dass ich um 13 Uhr mit meinem Programm alle .DAT Dateien bis TAXASFCZ.DAT importier. Um 14 Uhr kommt wieder eine Datei hinzu. Also speicher ich in meinem Programm den Namen, der letzten importieren Datei. Wie kann ich jetzt überprüfen, wenn ich die Liste der Dateien im Verzeichnis durchgeh, ob der Eintrag größer als meine letzte Datei ist?

Das Problem ist, dass ich a) alte Dateien im Verzeichnis nicht löschen kann und b) das Datum nicht benutzen kann, da es immer auf 1.1.70 gesetzt wird.


Ich bin für jeden Denkanstoß dankbar!!!

Grüße aus dem sonnigen Altrip :cheers: ,
Markus

Zacherl 5. Sep 2006 15:12

Re: String hochzählen
 
Du könntest dir ein Array of Char mit allen Buchstaben des Alphabets erstellen und den Buchstaben folgendermaßen ermitteln:
Buchstabe der letzten Datei: F
Neuer Buchstabe: arrayChar[pos('F', arrayChar) +1];

Florian

Matze 5. Sep 2006 15:12

Re: String hochzählen
 
Hi

Wenn es darum geht zu gucken, ob 'B' größer ist als 'A' (als Beispiel), dann kannst du dafür Delphi-Referenz durchsuchenOrd() nehmen. Bist du bei 'Z' muss du eben mit Ord('A') vergleichen.

Wieder zurück auf den Buchstaben kannst du mittels Delphi-Referenz durchsuchenChr() kommen.

Ich hoffe, ich habe das richtig verstanden.

negaH 5. Sep 2006 15:16

Re: String hochzählen
 
Delphi-Quellcode:
function NextFileName(const FileName: String): String;
var
  I: Integer;
begin
  Result := ExtractFileName(FileName);
  for I := Length(Result) downto 1 do
  begin
    Result[I] := Char(Ord(Result[I]) + 1);
    if Result[I] <= 'Z' then Break;
    Result[I] := 'A';
  end;
  Result := Result + '.DAT';
end;
Nun brauchst du nur noch zu schauen ob die Datei mit dem nächsten logsichen Namen auf dem Server existiert. Das machst du so lange bis dies nicht der Fall ist. Natürlich speicherst du bei dieser Iteration den zuletzt benutzten Dateinamen global ab.

Gruß Hagen

Noteip 5. Sep 2006 15:28

Re: String hochzählen
 
Danke für eure schnelle Hilfe, Hagen hat es auf den Punkt gebracht!

Danke.

Funktioniert super!!!

*Bitte closen*

Hawkeye219 5. Sep 2006 15:35

Re: String hochzählen
 
Zitat:

Zitat von Noteip
Funktioniert super!!!

Wirklich?

Meiner Meinung nach wird die Original-Extension verändert und eine neue angehängt.
Mit dem folgenden Code sollte das nicht mehr passieren:

Delphi-Quellcode:
function NextFileName(const FileName: String): String;
var
  I: Integer;
begin
  Result := ChangeFileExt(ExtractFileName(FileName), '');
  for I := Length(Result) downto 1 do
  begin
    Result[I] := Succ(Result[I]);
    if Result[I] <= 'Z' then Break;
    Result[I] := 'A';
  end;
  Result := Result + '.DAT';
end;
Gruß Hawkeye

negaH 5. Sep 2006 15:52

Re: String hochzählen
 
naja das ist bei deinem Code aber auch der Fall ;)

Delphi-Quellcode:
function NextFileName(const FileName: String): String;
var
  I: Integer;
  Ext,Path: String;
begin
  Ext := ExtractFileExt(FileName);
  Path := ExtractFilePath(FileName);
  Result := ChangeFileExt(ExtractFileName(FileName), '');
  for I := Length(Result) downto 1 do
  begin
    Result[I] := Succ(Result[I]); // gute Idee
    if Result[I] <= 'Z' then Break;
    Result[I] := 'A';
  end;
  Result := Path + Result + Ext;
end;
Gruß Hagen

negaH 5. Sep 2006 16:04

Re: String hochzählen
 
Ok, hier noch eine Version mit der FileName ein Dateiname mit Extenson und Pfad sein kann.

Delphi-Quellcode:
function NextFileName(const FileName: String): String;
var
  I,J: Integer;
begin
  Result := FileName;
  I := Length(Result);
  J := I;
  while (I > 0) and not (Result[I] in ['\', '/']) do
  begin
    if Result[I] = '.' then J := I -1;
    Dec(I);
  end;
  for J := J downto I +1 do
  begin
    Result[J] := Succ(Result[J]);
    if Result[J] <= 'Z' then Break;
    Result[J] := 'A';
  end;
end;
Gruß Hagen

Hawkeye219 5. Sep 2006 16:13

Re: String hochzählen
 
Zitat:

Zitat von negaH
naja das ist bei deinem Code aber auch der Fall

Nur zur Erklärung: mit "verändert" meinte ich folgendes:

Code:
xyz.dat -> xyz.dau.dat -> xyz.dau.dau.dat -> ...
Nur das wollte ich verhindern.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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