Lookup specific values in dataset in a script

Hi,

I want to create a script like the lookup expression function. Is it possible ?

For example, I have a dataset with 3 columns (A, B & C) and I want to know the line number of a specific value in column B. Then, I want to know values in column A & C that correspond to this line number.

Thanks,

A Window to illustrate:
Table Lookup Script_2015-08-27_0728.proj (9.53 KB)

The meat of the code:

[code]lookupIn=event.source.parent.getComponent(‘Lookup’).text
dataIn=system.dataset.toPyDataSet(event.source.parent.getComponent(‘Table’).data)
i=0
foundFlag=0
for row in dataIn:
if row[‘B’] == lookupIn:
event.source.parent.getComponent(‘Index’).text=str(i)
event.source.parent.getComponent(‘ResultA’).text=str(row[‘A’])
event.source.parent.getComponent(‘ResultB’).text=str(row[‘B’])
event.source.parent.getComponent(‘ResultC’).text=str(row[‘C’])
foundFlag=1
break
i+=1

if foundFlag==0:
event.source.parent.getComponent(‘Index’).text=’–’
event.source.parent.getComponent(‘ResultA’).text=’–’
event.source.parent.getComponent(‘ResultB’).text=’–’
event.source.parent.getComponent(‘ResultC’).text=’–’
[/code]

Using Nick Mudge’s PowerScripting Module (for completeness):

[code]lookupIn=event.source.parent.getComponent(‘Lookup’).text
dataIn=pa.dataset.toData(event.source.parent.getComponent(‘Table’).data)

lookupRow=dataIn.copy()
lookupRow.filterRows(lambda row: row[“B”] == lookupIn)

if len(lookupRow)>0:
event.source.parent.getComponent(‘Index’).text=str(list(dataIn).index(list(lookupRow)[0]))
event.source.parent.getComponent(‘ResultA’).text=str(lookupRow[0][‘A’])
event.source.parent.getComponent(‘ResultB’).text=str(lookupRow[0][‘B’])
event.source.parent.getComponent(‘ResultC’).text=str(lookupRow[0][‘C’])
else:
event.source.parent.getComponent(‘Index’).text=’–’
event.source.parent.getComponent(‘ResultA’).text=’–’
event.source.parent.getComponent(‘ResultB’).text=’–’
event.source.parent.getComponent(‘ResultC’).text=’–’[/code]

As a note, both methods will return the first match it finds. All others are ignored.

It works !

I have created a shared function whith your code :

[code]
def lookup(valueIn,tableIn,colnumber,colresult):
tableIn=system.dataset.toPyDataSet(tableIn)
i=0
foundFlag=0
for row in tableIn:
if row[colnumber] == valueIn:
return str(row[colresult])
foundFlag=1
break
i+=1

if foundFlag==0:
  return "No Match"[/code]

Thank you