Information générale
Catégorie:
Codage, syntaxe et commandes
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
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement