Indexing multiple email addresses in a file record

This forum is for general support of Xbase++
Post Reply
Message
Author
Cliff Wiernik
Posts: 605
Joined: Thu Jan 28, 2010 9:11 pm
Location: Steven Point, Wisconsin USA
Contact:

Indexing multiple email addresses in a file record

#1 Post by Cliff Wiernik »

We have a file that has several email address in each record. There were added over time and have not been put into a separate database of email addresses.

Each record has email1, email2, email3, email4, email5.

We want to be able to browse all emails within a single browse in ordered order. The file currently has 15,000 record with many records have 3 or more of the emails populated.

Is there any way to accomplish short of accumulating into a separate file/array to browse that would have to be recreated every time they need to do the browse.

Our environment uses the ADS server.

Cliff

bwolfsohn
Posts: 648
Joined: Thu Jan 28, 2010 7:07 am
Location: Alachua, Florida USA
Contact:

Re: Indexing multiple email addresses in a file record

#2 Post by bwolfsohn »

Cliff,

We have the same issue with phone numbers in records...

Here's some partial code segments that might give you some ideas...

what we did was a single phone number search that accessed each index

FOR i := 1 TO 3
do case
case i==1
MAIL->(OrdSetFocus("PHONE"))
case i==2
MAIL->(OrdSetFocus("PHONE2"))
case i==3
MAIL->(OrdSetFocus("PHONEFAX"))
endcase
mail->(dbseek(trim(upper(xValue)) , .f. )) // .t. := softseek on
IF !mail->(eof()) .OR. i==3 // found it
MAIL->(OrdSetFocus("PHONE"))
exit
ENDIF
NEXT


if you want a dynamic search on each keypress,

bKeyBlock := {|nKey,b,oGet|oGet:getData(),MailSearch(nKey,oGet,GetList,oRegisterBrowse,cMode)}


// need to check all 3 indexes
nFound := At(' ',xValue)
IF nFound > 0
IF nFound = 6
nFound := At(' ',xValue,7)
ENDIF
IF nFound > 0
xValue := SubStr(xValue,1,nFound-1)
ENDIF
ENDIF
FOR i := 1 TO 3
do case
case i==1
MAIL->(OrdSetFocus("PHONE"))
case i==2
MAIL->(OrdSetFocus("PHONE2"))
case i==3
MAIL->(OrdSetFocus("PHONEFAX"))
endcase
MAIL->(DC_SetScope(0,xValue))
MAIL->(DC_SetScope(1,xValue))
IF mail->(dc_keycount())>0
exit
else
dc_clrscope()
sleep(2)
IF i==3
MAIL->(OrdSetFocus("PHONE"))
MAIL->(DC_SetScope(0,xValue))
MAIL->(DC_SetScope(1,xValue))
ENDIF
ENDIF
NEXT
Brian Wolfsohn
Retired and traveling around the country to music festivals in my RV.
OOPS.. Corona Virus, so NOT traveling right now...
http://www.breadmanrises.com
FB travel group: The Breadman Rises

User avatar
rdonnay
Site Admin
Posts: 4729
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Indexing multiple email addresses in a file record

#3 Post by rdonnay »

Are you saying that you want 4 separate rows in the browse, one for each email?

Or do you want 1 row with 4 separate columns?
The eXpress train is coming - and it has more cars.

Cliff Wiernik
Posts: 605
Joined: Thu Jan 28, 2010 9:11 pm
Location: Steven Point, Wisconsin USA
Contact:

Re: Indexing multiple email addresses in a file record

#4 Post by Cliff Wiernik »

They just gave me a clarification on what they really want to do. We do not currently have index tags on each of the addresses, but they would like to search within our browse screen, a single email address column, but it would search all 5 index tags and go to the first record that has the matching email address. Normally, they would have to search what email address they want and seek in one, then move to the other.

It appears they are looking for something like what Brian is suggesting. In the browse format, that would be 1 record with 4-5 email address columns, but the seek process would go though each of them, typically with an incremental browse search.

The 1 record, many lines in a browse would also be something to consider as alternative.

User avatar
Auge_Ohr
Posts: 1407
Joined: Wed Feb 24, 2010 3:44 pm

Re: Indexing multiple email addresses in a file record

#5 Post by Auge_Ohr »

hi,

you can build a String from all Email Fields and use OrdWildSeek() which can work with increment Search.
i do it with Phone Number this Way

Code: Select all

IF USELOCK("XPPTEL",.T.,lock_dauer)

   _cdxname = "XPPTEL.CDX"                         
   _tagname = "ALLETELNO"                          
   _keyfeld = "TNR2STR(VORTELE)+"+;
              "TNR2STR(TELGES) +"+;
              "TNR2STR(VORFAX) +"+;
              "TNR2STR(TELFAX) +"+;
              "TNR2STR(VORPRIV)+"+;
              "TNR2STR(TELPRI) +"+;
              "TNR2STR(HANDY1) +"+;
              "TNR2STR(HANDY2) +"+;
              "TNR2STR(ANHANDY)+"+;
              "TNR2STR(PVVORT1)+"+;
              "TNR2STR(PVTEL1) +"+;
              "TNR2STR(PVVORF1)+"+;
              "TNR2STR(PVFAX1) +"+;
              "TNR2STR(PVHANDY)"

   OrdCreate(_cdxname,_tagname,_keyfeld)
   CLOSE INDEX
you only have to look that String is always same length. i do have to eliminate Space between Number ( if some )

Code: Select all

FUNCTION TNR2STR(value)
LOCAL RETVAR := ""
LOCAL nLen   := LEN(value)
LOCAL nSoll  := nLen
LOCAL i,nDiff
LOCAL cStr
// eliminate Space
FOR i = 1 TO nLen
    cStr := SUBSTR(value,i,1)
    IF cStr == CHR(32)
    ELSE
       RETVAR := RETVAR+cStr
    ENDIF
NEXT
// fill up same length
nDiff := nSoll - LEN(RETVAR)
FOR i = 1 TO nDiff
    RETVAR := RETVAR+CHR(32)
NEXT
RETURN RETVAR
now you can search (increment) this Way

Code: Select all

   ORDSETFOCUS("ALLETELNO")
   ORDWILDSEEK("*"+ALLTRIM(cString)+"*")
greetings by OHR
Jimmy

Wolfgang Ciriack
Posts: 479
Joined: Wed Jan 27, 2010 10:25 pm
Location: Berlin Germany

Re: Indexing multiple email addresses in a file record

#6 Post by Wolfgang Ciriack »

Hi Cliff,
if you use ADS, look at
http://bb.donnay-software.com/donnay/vi ... 231#p10231
This will filter your email adresses very fast.
_______________________
Best Regards
Wolfgang

Post Reply