Pascal Script

  • 12 Jul

    Adjust datepart of a filename with Limagito File Mover

    Q: Adjust datepart of a filename with Limagito File Mover. I have a file name “thisfile_20210712” and after transfer I would like to reduce one day “thisfile_20210711”. I can try to figure out with regex but what if the day is 20210801” that would be challenge for regex . I don’t know if you have any thing to allow external window host script to run after the job to fix this.

    A: Yes this is possible using some Pascal Script. If you think this is too difficult for you, just contact us and we’ll help.

    We received an example file of the customer:

    This is the example  “thisfile_20210711_new.pdf”

    Expected:  “thisfile_20210710_revised.pdf”

    1.Our Source is a Windows Folder.

    Limagito File Mover Windows Folder as Source

    2. Add the following ‘OnDestination’ Pascal Script. This script will strip and adjust the datepart in the filename.

    Limagito File Mover Pascal Script Menu

    Limagito File Mover On Destination Pascal Script

    Var
      iList: Integer;
      tmpDate: TDateTime;
      tmpDatePart: String;
      tmpList: TStringList;
     
    Function GetDateFromString(const aInput: String): TDateTime;
    var
      wYear, wMonth, wDay: Word;
    Begin
      wYear := StrToInt(Copy(aInput, 1, 4));
      wMonth := StrToInt(Copy(aInput, 5, 2));
      wDay := StrToInt(Copy(aInput, 7, 2));
      Try
        Result := EncodeDate(wYear, wMonth, wDay);
      Except
        Result := 0;
      End;  
    End;  
     
    Begin
      // thisfile_20210711_new.pdf
      psExitCode:= 0;
      // ... add your code here
      tmpList := TStringList.create;
      Try
        tmpList.delimiter := '_';
        tmpList.DelimitedText := psFileName;
        If tmpList.Count >= 3 Then     
        Begin
          tmpDatePart := tmpList.Strings[1];
          psLogWrite(1, '', 'DatePart from File ' + psFilePath + psFileName + ': ' + tmpDatePart);     
          tmpDate := GetDateFromString(tmpDatePart);
          tmpDate := psIncDay(tmpDate, -1);
          //
          If Not (tmpDate = 0) Then
          Begin
            tmpList.Strings[1] := FormatDateTime('YYYYMMDD', tmpDate);
            // Iterate
            For iList := 0 to (tmpList.Count-1) Do
            Begin
              If iList = 0 Then
                psVSA := tmpList.Strings[iList]
              Else  
                psVSA := psVSA + '_' + tmpList.Strings[iList];        
            End;  
            psLogWrite(1, '', 'Reesult psVSA: ' + psVSA);        
            psExitCode := 1;
          End
          Else          
            psLogWrite(1, '', 'GetDateFromString Error, ' + tmpDatePart);
        End
        Else
          psLogWrite(1, '', 'Count FileName _ Parts Error, ' + psFileName);        
      Finally
        tmpList.free;
      End;  
    End.

    3. In your Destination setup we’ll use the File Renaming option to rename the originale filename to:

    • the adjusted filename (%VSA)
    • ‘new.pdf’ part to ‘revised.pdf’

    Limagito File Mover File Renaming

    Limagito File Mover File Renaming

    4. RunTime Log Result:

    Limagito File Mover RunTime Log Result

    #FileTransfer

    If you need any info about this new ‘Adjust datepart of a filename’ option, please let us know.

    Best regards,

    Limagito Team

  • 07 May

    Q&A 43: Read first line of a file and move to a specific folder

    Q: Read first line of a file and move to a specific folder. I have some files that sit on a server and I would like to move them off to archive. Each file has a code in the first line that tells me where the file came from. The files are regular text (.txt) files. How can I set up Limagito to move the file based on that code? If the code contains B01, move to a folder named Branch1. If the code contains B02, move to a folder named Branch2. The code will usually have more letters surrounding the B01 and B02, so I need the logic to pick up on B01 and B02 being in the code.
    A: Yes this is possible. All you need a simple Pascal Script. We’ve added some screenshots to get you started.

    As a start we added a new Moving Rule with WIN as Source. In the windows source folder we added some txt files. We’ll read the first line and check if certain codes exists (B01, B02, ..). Depending on the code found we’ll use a different subfolder of the Destination folder. If this subfolder doesn’t exist then we’ll create it.

    1.Please open the Pascal Script option:

    LimagitoX File Mover Pascal Script

    2. Enable and add the following ‘On Destination’ Pascal Script:

    var
      tmpLine: String;
      tmpList: TStringList;
    Begin
      psExitCode:= 0;
      psVSA := 'Unknown'
      // ... add your code here
      tmpList := TStringList.Create;
      Try
        try
          tmpList.LoadFromFile(psFilePath + psFileName);
          // Check First Line
          If tmpList.Count <> 0 Then
          Begin
            tmpLine := UpperCase(tmpList.Strings[0]);
            psLogWrite(1, '', 'First Line: ' + tmpLine);
            // check
            If Pos('B01', tmpLine) <> 0 Then psVSA := 'Alabama';
            If Pos('B02', tmpLine) <> 0 Then psVSA := 'Alaska';
            If Pos('B03', tmpLine) <> 0 Then psVSA := 'Arizona';
            If Pos('B04', tmpLine) <> 0 Then psVSA := 'Arkansas';
            If Pos('B05', tmpLine) <> 0 Then psVSA := 'California';
            If Pos('B06', tmpLine) <> 0 Then psVSA := 'Colorado';
            If Pos('B07', tmpLine) <> 0 Then psVSA := 'Connecticut';
            If Pos('B08', tmpLine) <> 0 Then psVSA := 'Delaware';
            If Pos('B09', tmpLine) <> 0 Then psVSA := 'Florida';
            If Pos('B10', tmpLine) <> 0 Then psVSA := 'Georgia';
            // Set ExitCode
            psLogWrite(1, '', 'Subfolder which will be used ' + psVSA);
            psExitCode := 1;
          End
          Else
            psLogWrite(1, '', 'Error no lines in ' + psFilePath + psFileName);
        Except
          psLogWrite(1, '', 'Error when loading ' + psFilePath + psFileName);
        End;
      Finally
        tmpList.Free;
      End;
    End.

    Limagito File Mover Pascal Script On Destination

    3. Destination Setup, Create Subdir, option:  %VSA

    XFM Limagito File Mover Destination SubDir option

    4. RunTime Log Result

    Limagito File Mover RunTime Log

    5. Destination SubFolder Structure, if subfolder doesn’t exist then it will be create by our File Mover:

    #FileTransfer

    If you need any help with this ‘Read first line of a file’ request, please let us know.

    Happy Easter,

    Limagito Team

  • 23 Apr

    Moving a file based on specific filename part to specific folder

    Q: Moving a file based on specific filename part to specific folder

    Hi there, looking if your software can do this please.

    1) Look at a filename, parse out from character 8-16 and capture it as a ID number

    2) look at the subfolders, find folder with same name, if doesn’t exist, create.

    3) move the file to that location.

    Here is some more specific example

    PDF Name: 055400E900105028-DEN-20210412_12.pdf

    Folder name to search for, and if not exists, create and move the data.

    900104028

    The bolded number is the ID number we need to catch/reference.

    I think it could just skip the file in this ‘rule’ if the length of the file is not ok which would mean it doesn’t contain an ID number.

    For this 1 rule/purpose these files come from a third party provider which should be pretty consistent and contain that number.

    The problem is some folders contain only the ID and is missing the buffer 0’s we put in front.

    So pdf may say 000000465 but the folder that already exists may be called 465 ☹

    Hopefully your tool can assist in more than one way (which it looks like it can!)

    A: Yes this should be possible. We prepared some screenshots to get you started.

    1.You can use any Source but in this example we used a WIN folder:

    Limagito File Mover WIN as Source

    2. File Filter Setup

    The minimum file length we need is 20 (this includes the file extension). We are using the RegEx Include File Filter:

    ^[^|/\<>:?”*]{20,}$

    Limagito File Mover minimum length filter

    3.Now we need some Pascal Script to achieve the customer request:

    Be sure to set the ctOutputPath Constant to the Destination path you are using. In our example the Destination path will be ‘C:\Test\Out_Pdf\’.

    When the File ID starts with 0 then we’ll check if the ID as subfolder exists without the zeros. If it exists we’ll use that one but when not, then the complete ID will be used to create a new destination subfolder.

    Limagito File Mover Pascal Script option

    Var
      tmpDummyPath: String;
      tmpSubPath: String;
    Const
      ctOutputPath = 'C:\Test\Out_Pdf\';
    Begin
      psExitCode := 0;
      tmpSubPath := Copy(psFilename, 8, 9);
      psLogWrite(1, '', 'Stripped ' + tmpSubPath + ' from ' + psFilename);
      //
      IF Copy(tmpSubPath, 1, 1) = '0' Then
      Begin
        If Not DirectoryExists(ctOutputPath + tmpSubPath) Then
        Begin
          tmpDummyPath := tmpSubPath;
          Repeat
            tmpDummyPath := Copy(tmpDummyPath, 2, length(tmpDummyPath) - 1);
            If DirectoryExists(ctOutputPath + tmpDummyPath) Then
            Begin
              tmpSubPath := tmpDummyPath;
              Break;
            End;                  
          Until Copy(tmpDummyPath, 1, 1) <> '0';     
        End;  
      End;
      // The End
      psVSA := tmpSubPath;
      // Check
      If psVSA <> '' Then
        psExitCode := 1;
    End.

    Limagito File Mover On Destination Pascal Script

    4. WIN as Destination setup. Important because for this request we need a WIN as Destination.

    Limagito File Mover WIN as Destination

    Important, be sure the ctOutputPath Constant in the previous Pascal Script is the same as this path.

    Limagito File Mover WIN as Destination Path

    Please enable and set the Create SubDir option to:  %VSA

    Limagito File Mover WIN as Destination SubPath

    5. Result

    Source Files:

    The file RegEx filter will ignore a file when its length < 20. In this case file ‘055400E9001050.pdf’ will not be used.

    Limagito File Mover Source Files

    Destination Subfolders:

    • Subfolder 105208 was already available and was used because of the ‘zero’ prefix in the ID number.
    • Subfolder 900105028 was created by our File Mover.

    RunTime Log:

    File ‘055400E000105028-DEN-20210412_12 – Copy.pdf’ was copied to ‘C:\Test\Out_Pdf\105028\’ because this already existed. The Pascal Script removed the zeros from the ID number and checked if it already was available.

    File ‘055400E900105028-DEN-20210412_12.pdf’ was copied to ‘C:\Test\Out_Pdf\900105028\’. The ID number has no ‘zero’ prefix so the complete ID number was used to create the subfolder.

    Limagito File Mover RunTime Log

    As you see many options are possible with Limagito File Mover so don’t hesitate to ask.
    If you need any help with this ‘specific filename part to specific folder’ request, please let us know.

    Best Regards,

    Limagito Team

1 2 3 4 5 9