Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Slow string processing.
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00229755
Message ID:
00229764
Vues:
25
Sure, here's the main loop below. The first DO WHILE and DO CASE are to find the key name, then the next DO WHILE and DO CASE are to extract the associated data piece. The end result is we want to find the field name in the table that is the same as key name and store the data piece in that field.

All the nonsense with ~ and / is because they are the delimiters.

I hope thats enough.

Thanks.

Matt


**** CODE PIECE FOLLOWS

do while mpos < len(mresult)

keyname=""
currchar=substr(mresult,mpos,1)
if currchar="|"
mpos=mpos+1
currchar=substr(mresult,mpos,1)
endif
lastchar=substr(mresult,mpos-1,1)
do while (currchar!="~" or (currchar="~" and lastchar="/")) and ;
(currchar!="|" or (currchar="|" and lastchar="/")) and mpos < len(mresult)
do case
case inlist(currchar,"~","|","+") and lastchar="/"
* Remove the last slash, its just an escape character
keyname=left(keyname,len(keyname)-1)+currchar
case inlist(currchar,"~","|","+") and (lastchar!="/" or empty(lastchar))
* Not an escaped character, so don't add it
otherwise
keyname=keyname+currchar
endcase
mpos=mpos+1
lastchar=currchar
currchar=substr(mresult,mpos,1)
enddo

keydata=""
currchar=substr(mresult,mpos,1)
lastchar=substr(mresult,mpos-1,1)
do while (currchar!="|" or (currchar="|" and lastchar="/")) and mpos < len(mresult)
do case
case inlist(currchar,"~","|","+") and lastchar="/"
* Remove the last slash, its just an escape character
keydata=left(keydata,len(keydata)-1)+currchar
case inlist(currchar,"~","|","+") and (lastchar!="/" or empty(lastchar))
* Not an escaped character, so don't add it
otherwise
keydata=keydata+currchar
endcase
mpos=mpos+1
lastchar=currchar
currchar=substr(mresult,mpos,1)
enddo


* Get the number off the end of the keyname to tell us what record we're working with

mdigits=""
numdigits=1
do while val(right(keyname,numdigits))!=0 or right(keyname,numdigits)==replicate("0",numdigits)
numdigits=numdigits+1
enddo
mdigits=right(keyname,numdigits-1)
if !empty(mdigits)
if val(mdigits)>workrec
* New record needed
workrec=val(mdigits)
append blank
endif
endif

* Gotta replace the digits with a _ in order to replace the field name
if numdigits>1
fieldname=left(keyname,len(keyname)-numdigits+1)+"_"
else
fieldname=keyname
endif

* Now fill the field
set exact on
if ascan(fnames,fieldname)>0 and !empty(fieldname)
replace (fieldname) with keydata
endif

enddo
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform