Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Bug in ALINES()
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Titre:
Divers
Thread ID:
00824830
Message ID:
00961666
Vues:
28
Martin,

> Using MLINE() and _MLINE is very slow on long string (MaxCov plugin by Markus Egger)

I am afraid your statement is invalid. Please run the following test.
nLines=800
Dimension aArr[m.nLines]
cStr=Replicate(Replicate('x',200)+Chr(13)+Chr(10),m.nLines)

Clear

n=Seconds()
ALines(aArr,m.cStr)
? Seconds()-m.n, 'Using ALines()'

_Mline=0
n=Seconds()
For i=1 to m.nLines
	aArr[m.i]=Mline(m.cStr,1,_Mline)
Next
? Seconds()-m.n, 'Using Mline() and _MLine'

n=Seconds()
For i=1 to m.nLines
	aArr[m.i]=MLineEx(m.cStr,1)
Next
? Seconds()-m.n, 'Using MLineEx()'


*********************************************************************
** MLineEx() equal to MLINE() but faster
*********************************************************************
PROCEDURE MLineEx(lcSource,liLine)
* @lcSource - Source string
* liLine    - Number Row
LOCAL liEndCRLF,liStartCRLF
IF m.liLine#0 && 
   liEndCRLF=AT(CHR(13),m.lcSource,m.liLine) && 
   IF liEndCRLF=0 && Pokud konec nena¹el (i to se mù¾e stát)
      liStartCRLF=IIF(m.liLine=1,1,AT(CHR(13),m.lcSource,m.liLine-1)) &&
      RETURN IIF(m.liLine=1,m.lcSource,;
             IIF(SUBS(m.lcSource,m.liStartCRLF+1,1)=CHR(10),;
                   SUBST(m.lcSource,m.liStartCRLF+2),;
                   SUBST(m.lcSource,m.liStartCRLF+1))) && 
   ELSE
      IF m.liLine=1 && 
         RETURN LEFT(m.lcSource,m.liEndCRLF-1) && 
      ELSE
         liStartCRLF=AT(CHR(13),m.lcSource,m.liLine-1) && 
         liStartCRLF=m.liStartCRLF+;
                     IIF(SUBS(m.lcSource,m.liStartCRLF+1,1)=CHR(10),2,1)
         RETURN SUBST(m.lcSource,m.liStartCRLF,m.liEndCRLF-m.liStartCRLF)
      ENDIF
   ENDIF
ENDIF
RETURN ""
ENDPROC
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform