Q: Combine csv files to one and add a column to the end of each line.
- I have some .CSV files that we receive and want to combine them all into 1 file.
- We should also add a column to the end of each line, a new piece of data for each record. The extra data to add will depend on the filename of the cvs file.
- If the csv filename contains FILEID1 then we should add FILEID1-DATA.
- If the csv filename contains FILEID2 then we should add FILEID2-DATA.
Is this possible?
A: Yes, this is possible using some custom Pascal Script we created for you.
- Please open our Pascal Script option:
- Add and enable the following ‘On Rule Begin’ Pascal Script. This script will clear string var ( psVSA and psVSE ) when the rule begins.
Begin
psExitCode:= 1;
// ... add your code here
psVSA := '';
psVSE := '';
End.
- Add and enable the following ‘On Rule End’ Pascal Script. Do not forget to adjust the combined output filename.
Var
tmpList: TStringList;
Const
ctOutputFile = 'C:\Test\Out_Csv\MergeCsvFile.csv';
Begin
// Init
psExitCode:= 1;
// ... add your code here
If psVSE = '' Then
Begin
// No Error Occured
If Trim(psVSA) <> '' Then
Begin
tmpList := TStringList.Create;
Try
tmpList.CommaText := psVSA;
Try
tmpList.SaveToFile(ctOutputFile);
Except
Begin
psExitCode := 0;
psLogWrite(1, '', 'Save To File Exception: ' + ctOutputFile);
End;
End;
Finally
tmpList.Free;
End;
End
Else
psLogWrite(1, '', 'No csv data to save');
End
Else
Begin
// Error Occured
psLogWrite(1, '', 'Error handling csv file(s): ' + psVSE);
End;
End.
- Add ‘Pascal Script’ as Destination
Var
iList: Integer;
tmpCount: Integer;
tmpList, tmpListMem: TStringList;
tmpAddData, tmpEntry: String;
Const
ctAddHeader = ',"D"';
Begin
If psVSE <> '' Then
Begin
psExitCode:= 0;
psLogWrite(1, '', 'Skip File due to previous error: ' + psVSE);
End
Else
psExitCode:= 1;
// Set AddData
If pos('FILEID1', UpperCase(psFileName)) > 0 then
tmpAddData := 'FILEID1-DATA'
Else if pos('FILEID2', UpperCase(psFileName)) > 0 then
tmpAddData := 'FILEID2-DATA'
Else
tmpAddData := '';
// Load From File
tmpList := TStringList.Create;
tmpListMem := TStringList.Create;
Try
If Trim(psVSA) <> '' Then
tmpListMem.CommaText := psVSA;
Try
psLogWrite(1, '', 'Load From File: ' + psFilePath + psFileName);
tmpList.LoadFromFile(psFilePath + psFileName);
tmpCount := tmpList.Count;
If tmpCount > 0 Then
Begin
For iList := 0 to (tmpCount - 1) Do
Begin
tmpEntry := tmpList.Strings[iList];
If iList = 0 Then
Begin
// Header
If Trim(tmpEntry) <> '' Then
tmpListMem.Add(tmpEntry + ctAddHeader);
End
Else
Begin
// Data
If Trim(tmpEntry) <> '' Then
tmpListMem.Add(tmpEntry + tmpAddData);
End;
End;
// Update psVSA
If Trim(tmpListMem.CommaText) <> '' Then
psVSA := tmpListMem.CommaText;
End;
Except
Begin
psExitCode := 0;
psVSE := 'LoadFromFile ' + psFilePath + psFileName + ' Exception';
End;
End;
Finally
tmpList.Free;
tmpListMem.Free;
End;
End.
If you need any help with this ‘Combine csv files’ request, please let us know.
Best Regards,
Limagito Team
#filetransfer #filemanagement