Pascal Script

  • 31 Jul

    HL7 (text) File Modification with Limagito File Mover

    HL7 (text) File Modification

    Q: Good morning, thank you again for taking my call! Please find the before and after test files attached.

    1. You’ll see that the FT1 segment, specifically the FT1.25 section, was moved to FT1.7 section. (Each section is delimited by a pipe “|”.)
    2. We also added “CG” (without quotes) to the FT1.6 section. I’ve attached an image to visualize as well.

    I’m urgently trying to get this solution in place! Thank you for your help!!!!

    A: Summary of what we need to do:

    1. Load the HL7 (text) File.
    2. Iterate through the lines in the HL7 File.
    3. Search for a line that starts with ‘FT1|’.
    4. Make the requested adjustments.
    5. Save the HL7 file different from the Source.

    We created a Pascal Script to achieve this (v2021.7.31.0 or higher is needed for this script). Let’s start.

    1) Please add a Source and a File Filter for the .HL7 files you want to adjust
    2) Add the following Pascal Script as Destination, don’t forget to adjust the ctOutputPath const ( must end with a \ ).

    Limagito File Mover Pascal Script as Destination

    Var
      iList: Integer;
      tmpEntry: String;
      tmpError: String;
      tmpField: String;
      tmpFile : String;
      tmpList: TStringList;
      tmpEntryList: TStringList;
    Const
      ctOutputPath = 'C:\Test\IN_HL7\Out\';
    Begin
      psExitCode:= 0;
      // ... add your code here
      tmpFile := psFilePath + psFileName;
      tmpList := TStringList.Create;
      Try
        Try
          tmpList.LoadFromFile(tmpFile);
          // Iterate
          For iList := 0 to (tmpList.Count-1) Do
          Begin
            tmpEntry := tmpList.Strings[iList];
            If Pos('FT1|', tmpEntry) <> 0 Then
            Begin
              tmpEntryList := psDelimitedTextAsList('|', tmpEntry);
              If Assigned(tmpEntryList) Then
              Begin
                tmpEntryList.Delimiter := '|';
                tmpEntryList.StrictDelimiter := True;
                tmpEntryList.Quotechar := #0;
                // 0 indexed
                If tmpEntryList.Count >= 25 Then
                Begin
                  tmpEntryList.Strings[6] := 'CG';
                  tmpEntryList.Strings[7] := tmpEntryList.Strings[25];
                  tmpEntryList.Strings[25] := ''
                  tmpList.Strings[iList] := tmpEntryList.DelimitedText + '|';
                  // Save To File
                  tmpError := psSaveListToFile(tmpList, ctOutputPath + psFileName, False);
                  if tmpError = '' Then
                  begin
                    psExitCode := 1;
                    psLogWrite(1, '', 'Saved adjusted file to: ' + ctOutputPath + psFileName);
                  End
                  Else
                    psLogWrite(1, '', tmpError);
                End Else
                Begin
                  psLogWrite(1, '', 'Field Count error of: ' + tmpEntryList.DelimitedText);
                End;
                // Free
                tmpEntryList.Free;
                // Break
                Break;
              End;
            End;
          End;
        Except
          psLogWrite(1, '', 'Error loading file: ' + tmpFile);
        End;
      Finally
        tmpList.Free;
      End;
    End.

    #FileTransfer

    If you need any info about this ‘HL7 (text) File Modification’ request, please let us know.

    Best regards,

    Limagito Team

  • 15 Jul

    Can you use the date in a file name to create the subdirectory?

    Q: Can you use the date in a file name to create the subdirectory? So, when moving the attached file, we would like to create a sub-directory of:

    C:\Users\niall\WindowsDatabase\Destination\Valuation\2021\06. Jun\ ,

    Where ‘2021\06. Jun\’ is derived from the name of the source file? Thinking if we can pull a date variable/parameter from the filename we could pass it into the directory set-up. I can’t see how to get there.

    A: Yes this is possible using some Pascal Script.

    We received the following filename from the customer: ‘Valuation_2021-06-21.csv’. We’ll use this in the following example but remember we can adjust the script for any other filename you might have.

    1.Using a Windows folder as Source:

    Limagito File Mover Windows Folder as Source

    2.Open our ‘Pascal Script’ option:

    Limagito File Mover Pascal Script Menu

    3. Add  and enable the following ‘On Destination’ Pascal Script:

     

    Var
      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, 6, 2));
      wDay := StrToInt(Copy(aInput, 9, 2));
      Try
        Result := EncodeDate(wYear, wMonth, wDay);
      Except
        Result := 0;
      End;
    End;
     
    Begin
      // Valuation_2021-06-21.csv
      psExitCode:= 0;
      // ... add your code here
      tmpList := TStringList.create;
      Try
        tmpList.delimiter := '_';
        tmpList.DelimitedText := psFileName;
        If tmpList.Count >= 2 Then
        Begin
          tmpDatePart := tmpList.Strings[1];
          psLogWrite(1, '', 'DatePart from File ' + psFilePath + psFileName + ': ' + tmpDatePart);
          tmpDate := GetDateFromString(tmpDatePart);
          // 2021\06. Jun\
          If Not (tmpDate = 0) Then
          Begin
            psVSA := FormatDateTime('YYYY', tmpDate);
            psVSA := psVSA + '\' + FormatDateTime('DD', tmpDate);
            psVSA := psVSA + '. ' + FormatDateTime('MMM', tmpDate) + '\';
            // Debug        
            psLogWrite(1, '', 'Result 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.

    Limagito File Mover Pascal Script

    4. Adjust the ‘Create Subdir option’ to %VSA in your Destination Setup. We used a Windows folder as Destination in our example.

    Limagito File Mover Destination Setup

    5. RunTime Log Result:

    Limagito File Mover RunTime Log

    #FileTransfer

    If you need any info about this ‘date in a file name to create the subdirectory’ feature, please let us know.

    Best regards,

    Limagito Team

  • 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

1 16 17 18 19 20 21 22 27
SEARCH