Perl script 导出 DataStage jobs
来源:互联网 发布:数组作为函数形参 编辑:程序博客网 时间:2024/06/03 22:21
#!/usr/bin/perl
use strict;
my $USER_NAME = 'USER_NAME';
my $PASSWORD = 'PASSWORD';
my $DOMAIN = 'DOMAIN:PORT_NUMBER';
my $HOST_NAME = 'HOST_NAME';
my $PROJECT_NAME = 'PROJECT_NAME';
my $COMMAND ='C:/IBM/InformationServer/Clients/Classic/dsexport.exe'; # Path ofthe dsexport.exe tool
# Set the Inbound Main job name here
my $MAIN_JOB_NAME='MAIN_JOB_NAME';
# Set the Inbound Main job name here
my $DATA_TYPE_NAME='DATA_TYPE_NAME';
# Set the Data Type Dir
my $DATA_TYPE_DIR = 'DATA_TYPE_DIR';
# Set the Export Dir
my $EXPORT_DIR='D:/export';
my $SOURCE_FILE=$EXPORT_DIR.'/'.$MAIN_JOB_NAME;
my $OUTPUT_DIR=$EXPORT_DIR.'/'.$DATA_TYPE_DIR;
my $FORMAT_DIR = $OUTPUT_DIR.'/format';
my $PROCESS_DIR = $OUTPUT_DIR.'/process';
my $VALIDATION_DIR = $OUTPUT_DIR.'/validation';
my $TARGET_DIR=$OUTPUT_DIR;
my $targetPSName = 'ps'.$DATA_TYPE_NAME;
my $subJobName;
my $psName;
my $outputFileName;
my $isHeader = 0;
my $isJob = 0;
my $isParameterSet = 0;
my $isPSRecord = 0;
my $targetPSFound = 0;
my $isBelong = 0;
my $isAfterBeginJob = 0;
my $isAfterBeginDSRecord = 0;
my @headerBody;
my @jobBody;
my @parameterSetBody;
print "Deleting previous export ...\n";
&deldir($OUTPUT_DIR);
print "Previous export deleted.\n";
print "-------------------------------\n";
# Create export dir if not exist
print "Creating export directories...\n";
print "-------------------------------\n";
mkdir( $EXPORT_DIR, 0777 ) if ( !-d $EXPORT_DIR);
mkdir( $OUTPUT_DIR, 0777 ) if ( !-d $OUTPUT_DIR);
mkdir($FORMAT_DIR, 0777) if(! -d $FORMAT_DIR);
mkdir($PROCESS_DIR, 0777) if(! -d $PROCESS_DIR);
mkdir($VALIDATION_DIR, 0777) if(! -d $VALIDATION_DIR);
# Export the main job with dependent sub jobs
print "Exporting job: $MAIN_JOB_NAME ... \n";
my $output = `$COMMAND /D=$DOMAIN /H=$HOST_NAME /U=$USER_NAME/P=$PASSWORD /JOB=$MAIN_JOB_NAME $PROJECT_NAME$EXPORT_DIR/$MAIN_JOB_NAME`;
########################### Split the output into individual jobs#############################
print "\n\nSpliting individual jobs ... \n";
print "-------------------------------\n";
open(FH_MAINJOB, "<$SOURCE_FILE") || die "Unable toopen the file : $SOURCE_FILE<$!>";
sub deldir {
my $dirtodel= pop;
print"Deleting $dirtodel...\n";
my $sep ='\\'; #change this line to "/" on linux.
opendir(DIR,$dirtodel);
my @files =readdir(DIR);
closedir(DIR);
@files =grep { !/^\.{1,2}/ } @files;
@files = map{ $_ = "$dirtodel$sep$_"} @files;
@files = map{ (-d $_)?deldir($_):unlink($_) } @files;
rmdir($dirtodel);
}
while(<FH_MAINJOB>) {
# ParsingHeader block
if(/^BEGINHEADER/){
push @headerBody, $_;
$isHeader = 1;
next;
}
if(/^ENDHEADER/){
push @headerBody, $_;
$isHeader = 0;
}
if($isHeader){
if(/\s*CharacterSet "(CP936)"/){
# Change character code if local is CP936
s/CP936/CP1252/;
}
push @headerBody, $_;
#print FH_HEADER;
}
# ParsingJob block
if(/^BEGINDSJOB/){
$isJob = 1;
push @jobBody, $_;
$isAfterBeginJob = 1;
next;
}
if(/^ENDDSJOB/){
push @jobBody, $_;
$isJob = 0;
# output job
if($isBelong){
open(FH_JOB, ">$outputFileName")|| die "Unable to open the file : $$outputFileName<$!>";
foreach my $line (@headerBody){
print FH_JOB $line;
}
foreach my $line (@jobBody){
use strict;
my $USER_NAME = 'USER_NAME';
my $PASSWORD = 'PASSWORD';
my $DOMAIN = 'DOMAIN:PORT_NUMBER';
my $HOST_NAME = 'HOST_NAME';
my $PROJECT_NAME = 'PROJECT_NAME';
my $COMMAND ='C:/IBM/InformationServer/Clients/Classic/dsexport.exe'; # Path ofthe dsexport.exe tool
# Set the Inbound Main job name here
my $MAIN_JOB_NAME='MAIN_JOB_NAME';
# Set the Inbound Main job name here
my $DATA_TYPE_NAME='DATA_TYPE_NAME';
# Set the Data Type Dir
my $DATA_TYPE_DIR = 'DATA_TYPE_DIR';
# Set the Export Dir
my $EXPORT_DIR='D:/export';
my $SOURCE_FILE=$EXPORT_DIR.'/'.$MAIN_JOB_NAME;
my $OUTPUT_DIR=$EXPORT_DIR.'/'.$DATA_TYPE_DIR;
my $FORMAT_DIR = $OUTPUT_DIR.'/format';
my $PROCESS_DIR = $OUTPUT_DIR.'/process';
my $VALIDATION_DIR = $OUTPUT_DIR.'/validation';
my $TARGET_DIR=$OUTPUT_DIR;
my $targetPSName = 'ps'.$DATA_TYPE_NAME;
my $subJobName;
my $psName;
my $outputFileName;
my $isHeader = 0;
my $isJob = 0;
my $isParameterSet = 0;
my $isPSRecord = 0;
my $targetPSFound = 0;
my $isBelong = 0;
my $isAfterBeginJob = 0;
my $isAfterBeginDSRecord = 0;
my @headerBody;
my @jobBody;
my @parameterSetBody;
print "Deleting previous export ...\n";
&deldir($OUTPUT_DIR);
print "Previous export deleted.\n";
print "-------------------------------\n";
# Create export dir if not exist
print "Creating export directories...\n";
print "-------------------------------\n";
mkdir( $EXPORT_DIR, 0777 ) if ( !-d $EXPORT_DIR);
mkdir( $OUTPUT_DIR, 0777 ) if ( !-d $OUTPUT_DIR);
mkdir($FORMAT_DIR, 0777) if(! -d $FORMAT_DIR);
mkdir($PROCESS_DIR, 0777) if(! -d $PROCESS_DIR);
mkdir($VALIDATION_DIR, 0777) if(! -d $VALIDATION_DIR);
# Export the main job with dependent sub jobs
print "Exporting job: $MAIN_JOB_NAME ... \n";
my $output = `$COMMAND /D=$DOMAIN /H=$HOST_NAME /U=$USER_NAME/P=$PASSWORD /JOB=$MAIN_JOB_NAME $PROJECT_NAME$EXPORT_DIR/$MAIN_JOB_NAME`;
########################### Split the output into individual jobs#############################
print "\n\nSpliting individual jobs ... \n";
print "-------------------------------\n";
open(FH_MAINJOB, "<$SOURCE_FILE") || die "Unable toopen the file : $SOURCE_FILE<$!>";
sub deldir {
}
while(<FH_MAINJOB>) {