c:\usr\bin\find . -name "0813823*.EDB" | gawk "{print \"mv \"$1\" \"$1 }" | sed "s/0813\(823\)...\(..\)\(...\)\.\(ED\)/\2\3\.\4/2" |cmd.exe
17 сент. 2012 г.
Обработка ROO/RPO (блокировка счетов) из ПТК ПСД
Автоматизация обработки сообщений ROO/RPO (блокировка счетов) из ПТК ПСД
Написан скрипт на shell, который работает с архивом сообщений ПТК ПСД.
Скрипт забирает все сообщения 365-П (mz*), ищет среди них новые с момента последнего запуска, распаковывает (дважды), из полученного выбирает ROO/RPO (блокировка счетов),
запускает Верба-OW, расшифровывает, запускает конвертор форматов из формата 365-П в формат, который понимает Диасофт 4х4. Конвертор писал не я, конвертор берет имена файлов (вход и выход), ищет внутри файлов блокировку/разблокировку, формирует выходной файл. Конвертор написан на С++.
Применяемые утилиты:
1.Шелл и пр. (bc,ls,egrep,wc,rm,mv,cp)
2.7-zip
3.Верба-OW
4.iconv
5.blat
1.Шелл и пр. (bc,ls,egrep,wc,rm,mv,cp)
2.7-zip
3.Верба-OW
4.iconv
5.blat
#!/c:/usr/bin/sh #Const MailToList="p365@vsk.bank.ru" MailFrom="p365@vsk.bank.ru" MailSubj="365-P RPO/ROO" SMTPServer="10.10.240.10" Convertor="C:/365P/nal2dia.exe" Verba="FColseOW.exe" UnCab=c:/progra~1/7-zip/7z.exe UnArj=c:/progra~1/7-zip/7z.exe Log="C:/365P/take365.log" PtkInPath="P:/ARH" ProcdPath="C:/365P/PROCESSED" PrgDir="C:/365P/PROCESSING" UnpktDir="C:/365P/UNPACKED" DiasoftIn="C:/365P/4X4/IN" DiasoftArc="C:/365P/4X4/ARC" DiasoftTmp="C:/365P/4X4/TMP" DiasoftOut="O:/DIASOFT/LOAD/365P" VerbaDir="C:\\PROGRA~1\\MDPREI\\-OW~1" ByDatePath=`date +%Y`/`date +%m`/`date +%d` PtkInFiles=$PtkInPath/$ByDatePath ProcdFiles=$ProcdPath/$ByDatePath PTKFMask="^[mM][zZ]*" NalFMask="^[Rr][OoPp]*" if ! test -d $ProcdFiles ; then ; mkdir -p $ProcdFiles ; fi InFilesList=`ls -1 --sort=t $PtkInFiles| egrep $PTKFMask` PrdFilesList=`ls -1 --sort=t $ProcdFiles` NumInFiles=`ls -1 $PtkInFiles | egrep $PTKFMask | wc -l` NumPrdFiles=`ls -1 $ProcdFiles | egrep $PTKFMask | wc -l` echo `date +%c` Input files total: $NumInFiles >>$Log echo `date +%c` Already processed files: $NumPrdFiles >>$Log # FilesToProc=`echo $NumInFiles - $NumPrdFiles | c:/usr/bin/bc` ((FilesToProc=$NumInFiles - $NumPrdFiles)) echo `date +%c` Files to processing: $FilesToProc >>$Log if [ FilesToProc -lt "1" ] then echo `date +%c` Nothing to do, honey, exiting... >>$Log exit else #if found smth new! # copy it to processed out path to remember what already processed echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' cp $PtkInPath/`date +%Y`/`date +%m`/`date +%d`/'{}' $PrgDir/'{}' echo `date +%c` `echo $InFilesList | head -n $FilesToProc` >>$Log # unpack all CAB (!) files to UNPACKED directory echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' $UnCab e $PrgDir/'{}' -o$UnpktDir # unpack all AFN*.arj files to UNPACKED directory ls -1 $UnpktDir | egrep "^[Aa][Ff][Nn]*" |xargs --replace='{}' $UnArj e $UnpktDir/'{}' -o$UnpktDir # move all RP* files to 4x4 directory echo `ls -1 $UnpktDir | egrep $NalFMask |xargs --replace='{}' mv -f $UnpktDir/'{}' $DiasoftIn/'{}'` # clear all other shit rm $UnpktDir/* # move all processed mz* files from PROCESSING to PROCESSED echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' mv -f $PrgDir/'{}' $ProcdFiles/'{}' #decode here if [ `ls -1 $DiasoftIn | egrep $NalFMask | wc -l` -gt 0 ] then ScriptName=./`date +%s`.scr echo $ScriptName echo "Uncrypt $DiasoftIn\\\r*.*" > $ScriptName echo Start >> $ScriptName echo Exit >> $ScriptName `$VerbaDir/$Verba /@$ScriptName` echo `date +%c` Found new RPO/ROO files:`ls -1 $DiasoftIn | egrep $NalFMask | wc -l` >>$Log echo `date +%c` `ls -1 $DiasoftIn | egrep $NalFMask` >>$Log LogFile=./`date +%s`.log for f in $DiasoftIn/[Rr][OoPp]* do echo $f >>$LogFile echo \\r >>$LogFile cat $f | iconv.exe -s -f 866 -t cp1251 >>$LogFile echo \\f\\r >>$LogFile done if ! test -d $DiasoftArc/$ByDatePath ;then; mkdir -p $DiasoftArc/$ByDatePath; fi ls -1 $DiasoftIn | egrep $NalFMask | xargs --replace='{}' cp -i $DiasoftIn/'{}' $DiasoftArc/$ByDatePath/'{}' # convert format to diasoft 4x4 compartible files ls -1 $DiasoftIn | egrep $NalFMask | xargs --replace='{}' $Convertor $DiasoftIn/'{}' $DiasoftTmp/'{}' echo `date +%c` Sucsessfully converted files:`ls -1 $DiasoftTmp | egrep $NalFMask | wc -l` >>$Log echo `date +%c` `ls -1 $DiasoftTmp | egrep $NalFMask` >>$Log ls -1 $DiasoftTmp | egrep $NalFMask | xargs --replace='{}' mv $DiasoftTmp/'{}' $DiasoftOut/'{}' MailBody="365-P RPO/ROO received at "`date +%c` blat.exe -t $MailFrom -f $MailToList -s $MailSubj -i $MailFrom -q -server $SMTPServer -body "$MailBody" -attach $LogFile rm $LogFile rm $DiasoftIn/* rm $ScriptName fi fi
Выгодоприобретатели
#include "" #include " " #include " " #include " " #define MAXSTRING 1024 #define BUFFERSIZE 10 #define HEADERSIZE 4 #define BODYSIZE 8 /* body lines counter+delimiter! */ #define NOTEBEGIN 108 #define NOTELENGTH 40 char * my_strlwr(char * s); int cdecl main(unsigned argc, char *argv[]) { char *expression[]={ "агент","поруч","комис","доверии","управл","принци","комит","цессии", "ао","ассоциац","гуп","зао","оао","ооо","тоо","муп","ичп","пбоюл", "ип","нко","филиал","предст","копер","фонд","союз","сп","гоу","доу", "тсж","гск","гпк","роо","траст","нко"}; FILE *from, *to; unsigned char *str[BUFFERSIZE],*found; unsigned char *drive, *dir,*path_in,*path_out; unsigned char *name,*ext, *notefull; register i; if(argc!=2) { printf("Usage: filter \n"); exit(1); } if( (drive = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (dir = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (path_in = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (path_out = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (name = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (ext = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } if( (notefull = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){ printf("Cannot allocate memory.\n"); exit(1); } strcpy(path_out,argv[1]); strcpy(path_in,argv[1]); fnsplit(path_in,drive,dir,name,ext); fnmerge(path_in,drive,dir,name,".TMP"); free(drive); free(dir); free(ext); /*rename source to SRCNAME.tmp */ if((rename(path_out,path_in)!=NULL)){ printf("Cannot rename source file.\n"); exit(1); } /* open source file */ if((from = fopen(path_in, "rb"))==NULL){ printf("Cannot open source file.\n"); exit(1); } /* open destination file */ if((to = fopen(path_out, "wb"))==NULL){ printf("Cannot open destination file.\n"); exit(1); } /* allocate memory for BUFFERSIZE lines */ for(i=0;i = 'A' && *t <= 'Z' ){ *t = *t + ('a' - 'A'); } if (*t >= 0x80 && *t <= 0x8F ){ *t = *t + (0xA0 - 0x80); } if (*t >= 0x90 && *t <= 0x9F ){ *t = *t + (0xE0 - 0x90); } t++; } return s; }
Подписаться на:
Сообщения (Atom)