Zeitpunkt der Übertragung anhand des Dateinamens

General Discusssion in German
Post Reply
SeKl
Posts: 3
Joined: Thu Jan 25, 2024 1:43 pm

Zeitpunkt der Übertragung anhand des Dateinamens

Post by SeKl »

Liebes Forum,

aktuell habe ich eine Instanz mit sehr vielen Übertragungen Regeln und Varianten am Start.

Nun sitze ich vor einem Problem. Ich habe Dateien die mit den Monatstag beginnen

bsp: 25_DEC_tolledatei.xml

Nun habe ich für viele Monate in voraus die Daten auf einem FTP. Kann auf dem Zielsystem aber erst am Vortag verarbeitet werden.

Kann ich in den Masken irgendwie eine Variable für "Morgen" einsetzen? Ich hab bisher keine Variante gefunden.

Danke euch!

tobias
Posts: 1668
Joined: Tue Mar 31, 2020 7:37 pm

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Post by tobias »

Das geht relativ einfach mit einem PascalScript:
https://www.syncovery.com/pascalscript/

Dazu müssen aber die Dateinamen noch genauer definiert sein. Um das zu schreiben, braucht man einer Liste aller 1 Monatskürzel, die Sie verwenden, und außerdem muss man wissen, ob einstellige Tage einstellig sind oder mit 0.

SeKl
Posts: 3
Joined: Thu Jan 25, 2024 1:43 pm

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Post by SeKl »

Super, habe mit Pascal noch nicht so viel Kontakt.

Monate sind
'Jan';'Feb';'Mar';'Apr';'May';'Jun';'Jul';'Aug';'Sep';'Oct';'Nov';'Dec';

Der Montagstag ist immer 2-stellig. 01,02,03 . . ..

Haben Sie ein Beispiel das ich anpassen könnte?

Grüße

SeKl
Posts: 3
Joined: Thu Jan 25, 2024 1:43 pm

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Post by SeKl »

He, irgendwie bekomme ich das aktuelle Datum nicht. hier mein Versuch

function OnBeforeFileCopy(const SourceFile, DestFile: UnicodeString): Boolean;
var
SourceFileName: UnicodeString;
Day, Month, CurrentDay, CurrentMonth: Integer;
begin
SourceFileName := ExtractFileName(SourceFile);

if Length(SourceFileName) >= 12 then
begin
Day := StrToIntDef(Copy(SourceFileName, 1, 2), -1);
Month := StrToIntDef(Copy(SourceFileName, 4, 2), -1);

if (Day >= 1) and (Day <= 31) and (Month >= 1) and (Month <= 12) then
begin
CurrentDay := DayOf(Now);
CurrentMonth := MonthOf(Now);

if (Day = CurrentDay + 1) and (Month = CurrentMonth) then
begin
Result := True;
Exit;
end;
end;
end;

Result := False;
end;

tobias
Posts: 1668
Joined: Tue Mar 31, 2020 7:37 pm

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Post by tobias »

Hi,
das sieht aber schon gut aus!

Man sollte jedoch lieber den folgenden Hook verwenden:
function OnIncludeItem(const FileName, RelativePath: UnicodeString;
const isRightSide, isFolder:Boolean;
const FileSize:Int64; const FileAttr:LongWord;
const Connector: Opaque):Boolean;

Der sollte dann true zurückgeben, wenn die Datei kopiert werden soll, andernfalls false.

Mit Monaten als Zahlen im Dateinamen ist es natürlich einfacher, aber bei den Monatsnamen könnte ich auch noch helfen.

Warum das jetzt so nicht funktioniert, kann ich nicht direkt sagen. Man müsste da mit Logging arbeiten. Anders kriege ich meine Scripts auch oft nicht hin.

Also zum Beispiel:
Log('Looking at '+SourceFileName);
Log('File Day: '+IntToStr(Day)+', Month: '+IntToStr(Month));
Log('Today: '+IntToStr(CurrentDay)+', Month: '+IntToStr(CurrentMonth));

Dann gibt es noch den Fall, dass heute der letzte Tag des Monats ist.

Und dann gibt es noch den 31.12., aber vielleicht kommt der nicht vor?

Man kann auch mit dem Datum in einer Variable arbeiten, ohne Tag und Monat zu trennen. Dafür müsste man aber noch das Jahr der Dateien wissen. Oder kann man davon ausgehen, dass es immer das aktuelle Jahr ist?

zum Beispiel:

var Dateidatum:Double;

begin
[...]
Dateidatum:=EncodeDateTime(YearOf(Now),Month,Day,0,0,0,0);

if Dateidatum=Trunc(Now)+1 then
[...]

Post Reply