Question

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!!!!

Était-ce utile?

La 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.

Autres conseils

To search the string for the ASCII 254 character, you can do:

if '\xFE' in db_string:
    # 254 char was in the string

or, to find the position of the

delimiter_pos = db_string.find('\xFE')  # will be -1 if delimiter not found

You'll have to explain what you mean by "create dictionary based on that" in more detail, though. Do you mean a dictionary of column names and values? What's an example of the response string from the database?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top