VFP function to get the first line of a piece of text

Here are the three techniques

function GetFirstLineMLINE( tcMultilineText as string, tnMaxLen as Integer )
	local lnSaveMemoWidth, lnSaveMLine, lcReturn
	lnSaveMLine = _mline
	lnSaveMemoWidth = set("Memowidth")

	set memowidth to  m.tnMaxLen
	lcReturn = mline(m.tcMultiLineText,1)
	set memowidth to m.lnSaveMemoWidth

	if _mline< =len(m.tcMultiLineText)
		_mline = m.lnSaveMLine
		return left(m.lcReturn,m.tnMaxLen-2)+'..'
	else
		_mline = m.lnSaveMLine
		return m.lcReturn
	endif

function GetFirstLineAT( tcMultilineText as string, tnMaxLen as Integer )
	local nPos1, nPos2
	nPos1 = at(chr(13),m.tcMultilineText)
	nPos2 = at(chr(10),m.tcMultilineText)
	if m.nPos1==0
		nPos1 = len(m.tcMultiLineText)
	endif
	if m.nPos2>0
		nPos1 = min(m.nPos1,m.nPos2)
	endif
	
	if (m.nPos1-1 < = m.tnMaxLen) and m.nPos1<=len(m.tcMultiLineText)
		return left(m.tcMultilineText,m.nPos1-1)
	else
		return left(m.tcMultilineText,m.tnMaxLen-2)+'..'
	endif

function GetFirstLineALINE( tcMultilineText as string, tnMaxLen as Integer )
	local laLine[1], nLines
	
	nLines = alines(laLine,m.tcMultiLineText)
	
	if ( len(laLine[1]) < = m.tnMaxLen and m.nLines==1 )
		return laLine[1]
	else
		return left(laLine[1],m.tnMaxLen-2)+'..'
	endif

And finally the hybrid version. Note it differs somewhat from the final function to be a fairer comparison

function GetFirstLineHybrid(tcMultilineText as string, tnMaxLen as Integer )
    * Optimize out the case of a short string
	if (len(m.tcMultilineText)< =m.tnMaxLen ;
		and (not chr(13)$m.tcMultilineText) ;
		and (not chr(10)$m.tcMultilineText) )
		
		return m.tcMultilineText
	else
		* extract the first line
		local lnSaveMemoWidth, lnSaveMLine, lcReturn
		lnSaveMLine = _mline
		lnSaveMemoWidth = set("Memowidth")
		
		set memowidth to  m.tnMaxLen
		lcReturn = mline(m.tcMultiLineText,1)
		_mline = m.lnSaveMLine
		set memowidth to m.lnSaveMemoWidth

		return left(m.lcReturn,m.tnMaxLen-2)+'..'
	endif

THE END

Pages: 1 2 3

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Sorry, the comment form is closed at this time.