#!/bin/sh
#
# dbv2rows (version 1.2)
#
# Usage: dbv2rows
#
# By: Angel Corbera, TSID1, Refinery Isla, Curacao, N.A.
# Comments to: [email protected]
#
# This script was written for users who do NOT have 'iccprt'
# in their systems ( previous to v4.x), and only 'dbvu' is available.
# If you do have it (/opt/fox/ciocfg/api/iccprt), please use
# "geticc" and "icc2rows" instead.
# In any case, run utilities in a 50 Series machine. Fast!
#
# This script will process, concatenate, and convert ALL CPLBUG.dbv
# files obtained from dbvu residing in directory /opt/ac.
# It will produce TWO output files: PLANT.DBV and PLANT.TXT,
#
# PLANT.DBV has the Compound/Block parameters obtained from dbvu
# in a similar format, one line per parameter, but without the extra
# characters added by dbvu: asterisks, apostrophes, etc.
# It can be used by "get_head" utility to extract Block HEADERS.
#
# PLANT.TXT is another ascii file but with Compound/Block parameters
# in a multi-column one-line per Block format.
# PLANT.TXT can be imported by an spreadsheet program like Excel,
# or any database pgm, where parameters comparison could be done easily
# in this format.
#
# NOTE: This script was tested with files created from DBVU Version 3.3
#
# The *.dbv files can be created using:
# cd /usr/fox/sp/files
# /opt/fox/bin/tools/dbvu -t DBCPLBUG.UC > /opt/ac/CPLBUG.dbv
# Use "dbvu30" for CP30, and "dbvu40" for CP40.
#
# The output file PLANT.TXT can be opened in Excel, using "!" as delimiter.
#
# The first column has the format: "CP:Compound:Block", expand it to
# 3 columns inserting 2 new ones to the right, then use:
# Data, Text-to-Columns, using ":" as delimiter.
# You will end up with the first column for CP letterbugs, the second will
# be the COMPOUND names, and the third one the BLOCK names.
#
# The file can be sorted by Blocktype, and Headers added for each type
# of block. (HEADERS.TXT is obtained from "get_head" utility).
#
# Note: v3.3 CALC blocks have the highest number of parameters: 173,
# and they take up to the FQ column.
# V4.1.1 CALC blocks have also the highest number of parameters: 152,
# Others 4.1.1 blocks: FDSCAN (140), IND (120), PIDA (116),
# PIDX (102), FDRIN (95), PID (90).
#
# If you want, instead of working with one big file PLANT.TXT, you might
# want to split it into several small files, one for each type of blocks:
# grep \!AIN\! PLANT.TXT > ain.txt
# grep \!PID\! PLANT.TXT > pid.txt
# ... and so on
#
# Steps to use the utility:
# - mkdir /opt/ac
# - Copy "dbv2rows", "get_head" utilities to /opt/ac
# - Run dbvu on desired CP's. It will create /opt/ac/*.dbv files
# - Run "dbv2rows". This will produce: PLANT.DBV & PLANT.TXT
# - Run "get_head". It will produce HEADERS.TXT
# - Combine files: cat HEADERS.TXT PLANT.TXT > COMBINED.TXT
# - Transfer COMBINED.TXT to a PC. Open it in Excel.
# - Create a new column: A. Type AAAA for cells from HEADERS.TXT
# Type BBBB for cells from PLANT.TXT.
# - Sort now by BLOCKTYPE column, and by the new column A.
# - Enjoy it ...
#
cd /opt/ac
FILES=`ls *.dbv`
NFILES=`ls -l *.dbv | wc -l | awk '{print $1}'`
if [ $NFILES -le 0 ]
then
echo "\nNo *.dbv files found in /opt/ac. Exiting.\n"
exit 1
else
echo "\nAbout to start processing following files found in /opt/ac:"
echo "\n$FILES"
echo "\nDo you want to continue (y/n)?"
read answer
if [ $answer = "n" ]
then
exit 1
fi
fi
rm PLANT.DBV PLANT.TXT > /dev/null 2>&1
touch PLANT.DBV PLANT.TXT
DBVS=`ls -1 *.dbv | cut -c1-6`
for x in $DBVS
do
echo "\nProcessing $x ..."
# Delete apostrophes from all lines.
tr -d "\047" < $x.dbv > tmp1
# Delete BLANK and "NOT FOUND" lines
sed '/^$/d' tmp1 | sed '/ NOT FOUND/d' > tmp2
# Delete lines starting with 14 zeros (It will clip 2nd line of ECB params...!)
sed '/^ /d' tmp2 > tmp1
# Delete unnecessary ECB Compound lines
sed '/ ECB \*\*\*\*/d' tmp1 > tmp2
# Delete unnecessary (last) lines:
sed -e '/linkages/d' tmp2 | sed -e '/\.TOTAL:/d' > tmp1
sed -e '/Checkpoint file/d' tmp1 | sed -e '/BPC time/d' > tmp2
# CmpdName lines: Replace: any dots + any * + COMPOUND with: NAME = CPlbug:
sed -e 's/\.*\** COMPOUND / NAME = '$x':/' tmp2 > tmp1
# BlkName lines: Replace: *NAME with: 5spaces+NAME = CPlbug:
sed -e 's/\*NAME = / NAME = '$x':/' tmp1 > tmp2
# BlkName lines: Replace: NAME with: 5spaces+NAME = CPlbug:
sed -e 's/^NAME = / NAME = '$x':/' tmp2 > tmp1
# ECB Name lines: Replace: ": ECB :" with ":ECB:"
sed -e 's/: ECB :/:ECB:/' tmp1 > tmp2
# Delete ANY Extra (>1) spaces after = sign.
sed -e 's/ = */ = /' tmp2 > tmp1
# If line contains: local or remote, print Connection (not value).
awk '
{ if ( $5=="(local)" || $5=="(remote)" )
printf " %-6s = %-0s\n", $1,$4
else
print $0
}' tmp1 > tmp2
# If line has: **** or $4="(" and $6=")" or $6=")*",print $1,$2,$3 only.
awk '
{ if ( $4=="****" || ( $4=="(" && $6==")" || $6==")*" ) )
printf " %-6s = %-0s\n", $1,$3
else
print $0
}' tmp2 > tmp1
# Search for NAME lines and delete trailing dot
sed -e '/NAME =/s/\.//' tmp1 > tmp2
# Delete first 5 spaces from each line
sed -e 's/^ //' tmp2 > tmp1
# Replace any ! with another symbol (")
tr ! "\042" < tmp1 > tmp2
# Replace any @ with another symbol (a)
tr @ a < tmp2 > $x.new
echo "$x clean dbvu file has been saved to /opt/ac/$x.new"
done
echo "\nConsolidating all clean dbvu files into PLANT.DBV ..."
for x in $DBVS
do
cat $x.new >> PLANT.DBV
done
echo "\nFile PLANT.DBV is ready, converting it now to PLANT.TXT..."
# Insert @ before CP:Cmp:Blk
sed -e 's/NAME = /NAME = @/' PLANT.DBV > tmp2
echo "\nCounting down ...8\c"
# Replace "= " with z
sed -e 's/= /z/' tmp2 > tmp1
echo "...7\c"
# Replace z@ with @
sed -e 's/ NAME z@/ NAME @/' tmp1 > tmp2
echo "...6\c"
# Cut first 7 characters
cut -c8-70 tmp1 > tmp2
echo "...5\c"
# Delete extra spaces at end of line
sed -e 's/ *$//' tmp2 > tmp1
echo "...4\c"
# Replace LineFeeds with !
tr "\012" ! < tmp1 > tmp2
echo "...3\c"
# Replace @ with LineFeeds
tr @ "\012" < tmp2 > tmp1
echo "...2\c"
# Delete all zetas (z)
tr -d z < tmp1 > tmp2
echo "...1\c"
# Replace : with ! and add extra ! for COMPNDs
sed -e 's/\!COMPND\!/\!\!COMPND\!/' tmp2 > tmp1
sed -e 's/:/\!/' tmp1 | sed -e 's/:/\!/' > PLANT.TXT
echo "...0"
# delete temporary files
rm tmp1 tmp2
BLKS=`wc -l PLANT.TXT | awk '{print $1}'`
echo "\nThe ascii file PLANT.TXT ($BLKS cmpd/blks) is ready to be taken to Excel...\n"