Page 1 of 1

Zeitpunkt der Übertragung anhand des Dateinamens

Posted: Thu Jan 25, 2024 2:49 pm
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!

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Posted: Thu Jan 25, 2024 2:55 pm
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.

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Posted: Thu Jan 25, 2024 3:18 pm
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

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Posted: Fri Jan 26, 2024 12:45 pm
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;

Re: Zeitpunkt der Übertragung anhand des Dateinamens

Posted: Fri Jan 26, 2024 1:29 pm
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
[...]