abstraction of the column names (classes)

Wiebke Pätzold wiebke.paetzold at mplusr.de
Wed Aug 6 04:35:59 EDT 2003


On 5 Aug 2003 14:00:23 -0700, p-abel at t-online.de (Peter Abel) wrote:

>Wiebke Pätzold <wiebke.paetzold at mplusr.de> wrote in message news:<h29viv0b74ib3tc1g7eem3eo26fsjv93bj at 4ax.com>...
>> Hi all!
>> 
>> I create a database that contains a table. 'Nachname'  is one of 13
>> column names. This program can search for
>> a special letter. In my example it is 'ra'. and the search takes place
>> in 'Nachname'. 'ra' takes place within a word. This is solved with
>> regular expression. So that I can limit my search.
>> For example: I can search for 'ra' and it is not relevant wich letters
>> follow or wich letters are in front of 'ra'.
>> Now I want to abstract the column name 'Nachname'. So I search in an
>> unknown column. Only the user of the program should determine in wich
>> class the search takes place. This input should happen in the view
>> lines of testing the class.
>> My task is it to change the program that a abstraction of the column
>> names takes place.
>> Please give me a detailed answer. If it is possible the changed
>> program because I am very new in Python and I am orientationless.
>> 
>> This is the program
>> 
>> import sys
>> import Mk4py
>> import re
>> 
>> db = Mk4py.storage("c:\\datafile.mk",1)
>> vw = db.view("people")
>> 
>> class PatternFilter:
>>     def __init__(self, pattern):
>>         self.pattern = re.compile(pattern)
>> 
>>     def __call__(self, row):
>>         try:
>>             nachname = row.Nachname
>>         except AttributeError:
>>             return 0
>>         return self.pattern.search(nachname)is not None
>> 
>> vf = vw.filter(PatternFilter("ra.*"))
>> 
>> for r in vf:
>>     print  vw[r.index].Nachname
>
>RegEx are really great and there are a lot of problems you can 
>only solve with them. But if I understand you right your problem
>is to find a string where a substring is to be in, the simple
>string operation does the work:
>if String.find(substring) > -1:
>
>**find** will give you the position in String where substring
>will occure the 1rst time and -1 if substring doesn't occur.
>
>e.g.
>>>> nameList=['Meyer', 'Maxon', 'Johnson', 'Mueller']
>>>> for name in nameList:
>... 	if name.find('er')>-1:
>... 		print name
>... 		
>Meyer
>Mueller
>>>> 
>
>So if you can get your columns contents in **ColumnList**
>and your searchpattern in **SearchPattern** so the following
>function could do the work:
>
>def getPatternMatches(ColumnList,SearchPattern):
>  foundList=[]
>  for n in ColumnList:
>    if n.find(SearchPattern) > -1:
>      foundList.append(n)
>  return foundList
>
>Regards
>Peter

I forgot something:
The user must have the choice between a special search in a concrete
split and a search in all columns. The user have to determine wich
search method is used.




More information about the Python-list mailing list