javapythonjythonuniobjects

How do I search a string for an ASCII character in Jython?


I am pulling data from a database that uses the ASCII character 254 as the delimiter. I'm stumped as to how to search the string returned for the 254 and then create dictionary based on that?

My python class

import sys
sys.path.append('C:\\IBM\\UniDK\\uojsdk\\lib\\asjava.jar')
import os.path

from asjava.uniclientlibs import UniDynArray, UniDataSet
from asjava.uniobjects import UniSession, UniFile
from asjava.uniobjects import UniSubroutineException
from asjava.uniobjects.UniObjectsTokens import AT_FM

class u2py :

        def __init__ (self):
            self.conn = UniSession()

        def get_db(self):
            """ establish a connection to Unidata """
            username = 'dbuser'
            password = 'SuperSecretPassword'
            return  self.conn.connect("host", username, password, "ACCOUNT")

        def close_db(self):
            """ drop connection to Unidata """
            if self.conn.isActive():
                self.conn.disconnect()

        def open_file(self,file_name,rec):
            """ open a U2 file read a record and return it """
            uvfile = self.conn.open(file_name)
            uvrec = uvfile.read(rec)
            dataset = uvrec
            uvfile.close()
            return dataset

        def open_field(self,file_name,rec,field):
                    """ open a U2 file read a record and return it """
                    uvfile = self.conn.open(file_name)
                    uvrec = uvfile.readField(rec,field)
                    dataset = uvrec
                    uvfile.close()
                    return dataset

Here is my code in the console:

from u2py import *

u2 = u2py()
c = u2.get_db() #creates the connection to the DB
c #actually makes the connection
rec = u2.open_file('SOFILE','SO133700')
print rec

Which then prints this to the screen:

ZZZAA■XN3■CEL■931819501■20020215■BWI/PP■■

"■" is actually a field mark chr(254)

EDIT:

When I use this:

    >>>rec = u2.open_file('SOFILE','SO133699').split(chr(254))

I get this error

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'asjava.uniclientlibs.UniString' object has no attribute 'split'

EDIT and FINAL answer:

Using UniObjects Java

rec.toString().split(chr(254)) 

SUCCESS!!!!


Solution

  • your_string.split(chr(254)), e.g.

    >>> "foo\xFEbar\xFEbaz".split(chr(254))
    ['foo', 'bar', 'baz']
    

    This returns a list. How to build a dictionary from this I'll leave to you, since I don't know what you want for keys and values.