Pascal Script

  • 17 Apr

    How-To use a csv file as filter and destination path in LimagitoX File Mover

    Another example of how Pascal Script can be used. In this how-to we’ll explain you how the content of a csv file can be used to filter the source file and at the same time this csv file will be used to set the destination path.

    In this example we use C:\Test\Demo as base folder. It contains 3 subfolders which will be used by the Moving Rule.

    1. C:\Test\Demo\Csv  :  contains the Csv file which we will scan for its content. The content will give us the file filter and destination path.
    2. C:\Test\Demo\In  :  folder will be used as source of the moving rule
    3. C:\Test\Demo\Out  :  folder will be used as destination path. We’ll receive this info from the csv file.

    In the Csv subfolder we created an excel file. First column contains the filename filter. We’ll search for files which contain this string in its filename. The second column is used for the destination path when this file is found.

    Next we did an export of this excel file to csv. We need this cvs file for our Pascal Script.

    Content of the Source Folder:

    Select this folder in the Source Setup (WIN).

    Setup of the File Filter. Important, select RegEx Include filter and add %VSB as filter.

    Open the Pascal Script Setup:

     

    Add the following ‘On Rule Begin’ Pascal Script. Don’t forget to adjust the ctCsvFile constant (depends on your setup).

    Var
      iList: Integer;
      tmpList: TStringList;
      tmpEntry: String;
      tmpName: String;
      tmpCount: Integer;
      tmpPos: Integer;
    Const
      ctCsvFile = 'C:\Test\Demo\Csv\List.csv';
      ctCsvSep = ';';
    Begin
      psExitCode:= 0;
      psVSA := '';
      psVSB := '';
      // ... add your code here
      Try
        tmpList := TStringList.Create;
        Try
          tmpList.LoadFromFile(ctCsvFile);
          If tmpList.Count > 0 Then
          Begin
            tmpCount := tmpList.Count - 1;
            For iList := 0 to tmpCount Do
            Begin
              tmpEntry := Trim(tmpList.Strings[iList]);
              tmpPos := Pos(ctCsvSep, tmpEntry);
              If tmpPos <> 0 Then
              Begin
                tmpName := Copy(tmpEntry, 1, tmpPos-1);
                If iList = tmpCount Then
                  psVSB := psVSB + '.*' + tmpName + '.*'
                Else
                  psVSB := psVSB + '.*' + tmpName + '.*|'
              End;
            End;
            psVSA := tmpList.CommaText;
            // Debug Info
            psLogWrite(1, '', 'psVSA: ' + psVSA);
            psLogWrite(1, '', 'psVSB: ' + psVSB);
            // Set psExitCode
            If (psVSA <> '') And (psVSB <> '') Then
              psExitCode := 1;
          End;
        Except
          psLogWrite(1, '', 'Load Script File Exception');
        End;
      Finally
        tmpList.Free;
      End;
    End.

    Add the following ‘On Destination’ Pascal Script.

    Var
      iList: Integer;
      tmpList: TStringList;
      tmpEntry: String;
      tmpName: String;
      tmpPath: String;
      tmpCount: Integer;
      tmpPos: Integer;
    Const
      ctCsvSep = ';';
    Begin
      psExitCode:= 0;
      psVSC := '';
      // ... add your code here
      Try
        tmpList := TStringList.Create;
        Try
          tmpList.CommaText := psVSA;
          If tmpList.Count > 0 Then
          Begin
            tmpCount := tmpList.Count - 1;
            For iList := 0 to tmpCount Do
            Begin
              tmpEntry := Trim(tmpList.Strings[iList]);
              tmpPos := Pos(ctCsvSep, tmpEntry);
              If tmpPos <> 0 Then
              Begin
                tmpName := Copy(tmpEntry, 1, tmpPos-1);
                If Pos(tmpName, psFileName) <> 0 Then
                begin
                  tmpPath := Copy(tmpEntry, tmpPos+1, length(tmpEntry)-tmpPos);
                  If tmpPath <> '' Then
                  Begin
                    psVSC := tmpPath;
                    Break;
                  End;
                End;
              End;
            End;
            // Debug Info
            psLogWrite(1, '', 'psVSC: ' + psVSC);
            // Set psExitCode
            If (psVSC <> '') Then
              psExitCode := 1
            Else
              psLogWrite(1, '', 'Could not find a path for: ' + psFileName);
          End;
        Except
          psLogWrite(1, '', 'Find Destination Path Exception');
        End;
      Finally
        tmpList.Free;
      End;
    End.

    Add a WIN Destination:

    Set ‘Select Directory’ to %VSC

    Enable and trigger the rule. The Source files will be filtered and moved to the destination as set in the csv file.

    Destinations created with information from the csv file:

    Destination content example:

    This is just an example of what can be done using Pascal Script. If you need any help using Pascal Script, please let us know.

    Regards,

    Limagito Team

  • 29 Feb

    How-To AES-256 Encrypt and Decrypt Files in LimagitoX File Mover

    We’ve added the following AES-256 Encrypt and Decrypt Pascal Script functions in v2020.2.29.0:

    • Function psSimpleDecryptFile(Source, Destination, Key: String; IVAtBeginning: Boolean): Boolean;
    • Function psSimpleEncryptFile(Source, Destination, Key: String; IVAtBeginning: Boolean): Boolean;

    psSimpleEncryptFile and psSimpleDecryptFile can be used to cypher/decypher any file content using AES-256 as encryption standard. The code uses a safe block chaining mode like CFB and PKCS7 padding. If ‘IVAtBeginning‘ is TRUE, a random Initialization Vector will be computed, and stored at the beginning of the output binary buffer. It will generate the binary key using SHA-256 over the supplied ‘Key’ string, and will use AES-NI hardware instructions if your CPU supports it.

    Some screenshots to get you started. Let’s begin with the encryption script. Source will be the directory of files you want to Encrypt. As Destination you’ll need to add a Pascal Script.

    The Script itself, don’t forget to adjust the ctOut path and the ctKey Const:

    Const
      ctOut = 'C:\Test\Out\Encrypted\';
      ctKey = '*-+Key0123456789';
    Begin
      // ... add your code here
      If psSimpleEncryptFile(psFilePath+psFilename, ctOut+psFileName, ctKey, True) then
      Begin
        psExitCode:= 1;
        psLogWrite(1, '', 'Encryption Successful: ' + psFilename + psFilePath);
      End
      Else
      Begin
        psExitCode:= 0;
        psLogWrite(1, '', 'Encryption Error: ' + psFilePath + psFilename);
      End;
    End.

    AES-256.Encryption.Setup

    In case you want to Decrypt Files, Source will be the directory containg the encrypted files (AES-256). As Destination you’ll need to add a different Pascal Script. Same here, don’t forget to adjust the ctOut path and the ctKey Const.

    Const
      ctOut = 'C:\Test\Out\Encrypted\Decrypted\';
      ctKey = '*-+Key0123456789';
    Begin
      psExitCode:= 1;
      // ... add your code here
      If psSimpleDecryptFile(psFilePath+psFilename, ctOut+psFileName, ctKey, True) then
      Begin
        psExitCode:= 1;
        psLogWrite(1, '', 'Decryption Successful: ' + psFilename);
      End
      Else
      Begin
        psExitCode:= 0;
        psLogWrite(1, '', 'Decryption Error: ' + psFilename);
      End;
    End.

    AES-256.Decryption.Setup

    If you need any help, please let us know.

    Regards,

    Limagito Team

     

  • 19 Nov

    Pascal Script, Creating a text file

    Dear users,

    Simple Pascal Script to create a txt file containing the files handled by our file mover.

    1 Add PS as Destination

    2. Add the following Pascal Script. Don’t forget to adjust the ctOutputPath and ctOutputFilename.

    Var
      tmpList: TStringList;
      tmpFile: String;
    Const
      ctOutputPath = 'C:\Test\Out\';
      ctOutputFilename = 'Info.txt';
    Begin
      psExitCode:= 1;
      // Init Var
      tmpFile := ctOutputPath + ctOutputFilename;
     
      tmpList := TStringList.Create;
      Try
        psLogWrite(1, '', 'Add ' + psfilePath + psFileName + ' to ' + tmpFile);
        If FileExists(tmpFile) Then
          tmpList.LoadFromFile(tmpFile);
        tmpList.Append(psFilePath + psFilename);
        tmpList.SaveToFile(tmpFile);
      Finally
        tmpList.Free;
      End;
    End.

    Regards,
    Pascal

1 2 3