Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Need help translating Python phrase

rjsosiAug 24 2020 — edited Aug 24 2020

Hi,

We're kind in a bind. We had a guy write some Python and then leave. Of course no documentation, no comments.

Not knowing Python we need translate this into Shell script because we're on a dead line to run it.

We are translating a Python 'replace' command in a file_write method.

I am trying to see what '(\"|\\\|'')') would translate to in Linux using the sed command.

Are they looking for " then replacing all "\" with just ')'?

The replace command is at the end of the line below.

Specifically replace = '(\"|\\\|'')' output = dnb.file_write(input_file = gunzip_dnb['file_output'], output_file = 'dnb_{0}{1}'.format(yyyy,mm), folder = gunzip_dnb['folder'], delimiter = '|', header = header_dnb, replace = '(\"|\\\|'')')

Would the Sed statement be something like: sed /'(\"/\\\/'')'/g or in shell script: s/'(\"/\\\/'')'/g?

Is it saying start when you find the first " in a record then replace all '\' with ')"?

In addition here's the code for the file_write method.

def file_write(self, input_file, output_file, delimiter, folder = None, header = None, replace = None):

   """

  Creates a file from an input of lines. 

  """

   if folder == None:

  folder = self._folder

   with open('{0}/{1}'.format(folder, input_file), encoding = 'utf-8', errors = 'ignore') as file:

  lines = file.readlines()

  file_header = self.file_header(lines)

  file_trailer = self.file_trailer(lines)

  file_date = self.file_date(file_header, file_trailer)

  file_output = lines[file_header['line']:file_trailer['line']]

   with open('{0}/{1}'.format(folder, output_file), 'w') as output_file:

   if not header == None:

  output_file.write(header)

  output_file.write('\n')

   for line in file_output:

   if not replace == None:

  line = self.line_replace(line, find = replace, replace = '')

  line = self.line_split(line, delimiter)

  line.insert(0, file_date)

  line = ('{0}'.format(delimiter)).join(line)

  output_file.write(line)

  output_file.write('\n')

  file_write = dict()

  file_write['file'] = file

  file_write['folder'] = folder

   return file_write

And for Line_replace:

def line_replace(self, line, find, replace):

"""

Replaces a value in a line.

Parameters

----------

Returns

-------

result :

"""

line = re.sub(r'{0}'.format(find), replace, line)

return line

Please let us know if you can help.

Thanks!

Comments

ORASCN

Hi ,
Use the SQLEXEC feature to execute database statements or call procs from GG processes. Please check the below,

SQLEXEC (0 Bytes)17 Customizing Oracle GoldenGate Processing (0 Bytes)
Regards,
Veera

Kremnican

Unfortunately SQLEXEC in the MAP statement executes even before the MAP is "executed" (insert / update / delete) as the result can be used in the MAP statement itself.
Standalone SQLEXEC has a timer, which means it either runs when not needed or there's no guarantee it will be run right before the COMMIT, e.g. the timing may cause to run the SQL procedure some time after COMMIT, which may cause inconsistent behaviour.

LexmanLexman-Oracle

As your requirement is ti run the SP on a subset of data, you must use sqlexec with MAP statement. Sqlexec for MAP statements have the option to run the SP on the data set before or after the mapping
Check options AFTERFILTER/BEFOREFILTER in sqlexec documentation
Also , you can choose the iteration of SP run , again option EXEC {MAP | ONCE | TRANSACTION | SOURCEROW}
https://docs.oracle.com/en/middleware/goldengate/core/19.1/reference/sqlexec.html#GUID-34A0589B-1450-4BC9-A573-683895AAA1EC

1 - 3

Post Details

Added on Aug 24 2020
0 comments
141 views