ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

passer une chaine de caracteres en notation literale dont la longueur peut depasser 255   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
pas de note

Contributions > 20 - Trucs et Astuces

passer une chaine de caracteres en notation literale dont la longueur peut depasser 255
# 0000000498
ajouté le 04/12/2007 11:50:04 et modifié le 04/12/2007
consulté 8791 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0

Description
Ce n'est pas 100% correct, mais suffisant pour mes besoins
Code source :
#define TRUE  .T.
#define FALSE  .F.

#define CR  chr(0x0d)
#define NL  chr(0x0a)
#define CRLF  CR+NL

?str2arg(repl('A', 256))

#define STR_MAX_EVAL_LEN  255
*-------------------------------------------------------------------------------
function Str2Arg(s)

  do case
  case isnull(m.s)
    return 'null'

  case len(m.s) <= STR_MAX_EVAL_LEN
    return Str2Arg_One(m.s)

  otherwise
    && _show, len(m.s)
    local i, ss
    ss = ''
    for i = 1 to len(m.s) step STR_MAX_EVAL_LEN
      ss = '' + m.ss + '+' + Str2Arg_One(substr(m.s, m.i, STR_MAX_EVAL_LEN))
    endfor

    return substr(m.ss, 2)

  endcase


endfunc
*---------------------------------------------------------------------------
function Str2Arg_One(s)

  do case
  case empty(at(['], m.s))
    return Str2Arg_One_(m.s, [']['])

  case empty(at(["], m.s))

    return Str2Arg_One_(m.s, ["]["])


  case empty(at('[', m.s)) and empty(at(']', m.s))

    return Str2Arg_One_(m.s, '['']')

  otherwise
    assert FALSE  && deal with this later
    return null

  endcase

endfunc
*---------------------------------------------------------------------------
function Str2Arg_One_(s, sepLeft, sepRight)


  s = strtran(m.s, CRLF, m.sepRight + [ + chr(0xd) + chr(0xa) + ] + m.sepLeft )
  s = strtran(m.s, CR, m.sepRight+ [ + chr(0xd) + ] + m.sepLeft )
  s = strtran(m.s, NL, m.sepRight + [ + chr(0xa) + ] + m.sepLeft)

  return m.sepLeft + m.s + m.sepRight
endfunc
*---------------------------------------------------------------------------
Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3