- CFML Reference User Guide
- ColdFusion functions
- ColdFusion functions by category
- Functions a-b
- Abs
- ACos
- AddSOAPRequestHeader
- AddSOAPResponseHeader
- AjaxLink
- AjaxOnLoad
- ApplicationStop
- ArrayAppend
- ArrayAvg
- ArrayClear
- ArrayContains
- ArrayContainsNoCase
- ArrayDelete
- ArrayDeleteAt
- ArrayDeleteNoCase
- ArrayEach
- ArrayFilter
- ArrayFind
- ArrayFindAll
- ArrayFindAllNoCase
- ArrayFindNoCase
- ArrayInsertAt
- ArrayIsDefined
- ArrayIsEmpty
- ArrayLen
- ArrayMap
- ArrayMax
- ArrayMin
- ArrayNew
- ArrayPrepend
- ArrayReduce
- ArrayResize
- ArraySet
- ArraySetMetadata
- ArraySlice
- ArraySort
- ArraySum
- ArraySwap
- ArrayToList
- Asc
- ASin
- Atn
- AuthenticatedContext
- AuthenticatedUser
- BinaryDecode
- BinaryEncode
- BitAnd
- BitMaskClear
- BitMaskRead
- BitMaskSet
- BitNot
- BitOr
- BitSHLN
- BitSHRN
- BitXor
- BooleanFormat
- Abs
- Functions-c-d
- CacheGet
- CacheGetAllIds
- CacheGetMetadata
- CacheGetProperties
- CacheGetSession
- CacheIdExists
- CachePut
- CacheRegionExists
- CacheRegionNew
- CacheRegionRemove
- CacheRemove
- CacheRemoveAll
- CacheSetProperties
- CallStackDump
- CallStackGet
- CanDeSerialize
- Canonicalize
- CanSerialize
- Ceiling
- CharsetDecode
- CharsetEncode
- Chr
- CJustify
- Compare
- CompareNoCase
- Cos
- CreateDate
- CreateDateTime
- CreateObject
- CreateObject: .NET object
- CreateObject: COM object
- CreateObject: component object
- CreateObject: CORBA object
- CreateObject: Java or EJB object
- CreateObject: web service object
- CreateODBCDate
- CreateODBCDateTime
- CreateODBCTime
- CreateSignedJWT
- CreateEncryptedJWT
- CreateTime
- CreateTimeSpan
- CreateUUID
- CSRFGenerateToken
- CSRFVerifyToken
- CSVRead
- CSVWrite
- CSVProcess
- DateAdd
- DateCompare
- DateConvert
- DateDiff
- DateFormat
- DatePart
- DateTimeFormat
- Day
- DayOfWeek
- DayOfWeekAsString
- DayOfYear
- DaysInMonth
- DaysInYear
- DE
- DecimalFormat
- DecodeForHTML
- DecodeFromURL
- DecrementValue
- Decrypt
- DecryptBinary
- DeleteClientVariable
- Deserialize
- DeserializeJSON
- DeserializeXML
- DirectoryCopy
- DirectoryCreate
- DirectoryDelete
- DirectoryExists
- DirectoryList
- DirectoryRename
- DollarFormat
- DotNetToCFType
- Duplicate
- Functions-e-g
- EncodeForCSS
- EncodeForDN
- EncodeForHTML
- EncodeForHTMLAttribute
- EncodeForJavaScript
- EncodeForLDAP
- EncodeForURL
- EncodeForXML
- EncodeForXMLAttribute
- EncodeForXpath
- Encrypt
- EncryptBinary
- EntityDelete
- EntityLoad
- EntityLoadByExample
- EntityLoadByPK
- EntityMerge
- EntityNew
- EntityReload
- EntitySave
- EntityToQuery
- Evaluate
- Exp
- ExpandPath
- FileClose
- FileCopy
- FileDelete
- FileExists
- FileGetMimeType
- FileIsEOF
- FileMove
- FileOpen
- FileRead
- FileReadBinary
- FileReadLine
- FileSeek
- FileSetAccessMode
- FileSetAttribute
- FileSetLastModified
- FileSkipBytes
- FileUpload
- FileUploadAll
- FileWrite
- FileWriteLine
- Find
- FindNoCase
- FindOneOf
- FirstDayOfMonth
- Fix
- Floor
- FormatBaseN
- GeneratePBKDFKey
- GenerateSecretKey
- GetApplicationMetadata
- GetAuthUser
- GetBaseTagData
- GetBaseTagList
- GetBaseTemplatePath
- GetClientVariablesList
- GetComponentMetaData
- GetContextRoot
- GetCPUUsage
- GetCurrentTemplatePath
- GetCSPNonce
- GetDirectoryFromPath
- GetEncoding
- GetException
- GetFileFromPath
- GetFileInfo
- GetFreeSpace
- GetFunctionCalledName
- GetFunctionList
- GetGatewayHelper
- GetHttpRequestData
- GetHttpTimeString
- GetK2ServerDocCount
- GetK2ServerDocCountLimit
- GetLocale
- GetLocaleDisplayName
- GetLocalHostIP
- GetMetaData
- GetMetricData
- GetPageContext
- GetPropertyString
- GetPropertyFile
- GetPrinterInfo
- GetPrinterList
- GetProfileSections
- GetProfileString
- GetReadableImageFormats
- GetSafeHTML
- GetSAMLAuthRequest
- GetSAMLLogoutRequest
- Generate3DesKey
- GenerateSAMLSPMetadata
- GetSOAPRequest
- GetSOAPRequestHeader
- GetSOAPResponse
- GetSOAPResponseHeader
- GetSystemFreeMemory
- GetSystemTotalMemory
- GetTempDirectory
- GetTempFile
- GetTemplatePath
- GetTickCount
- GetTimeZoneInfo
- GetToken
- GetTotalSpace
- GetUserRoles
- GetVFSMetaData
- GetWriteableImageFormats
- Functions-h-im
- Hash
- HMac
- Hour
- HQLMethods
- HTMLCodeFormat
- HTMLEditFormat
- IIf
- ImageAddBorder
- ImageBlur
- ImageClearRect
- ImageCopy
- ImageCreateCaptcha
- ImageCrop
- ImageDrawArc
- ImageDrawBeveledRect
- ImageDrawCubicCurve
- ImageDrawLine
- ImageDrawLines
- ImageDrawOval
- ImageDrawPoint
- ImageDrawQuadraticCurve
- ImageDrawRect
- ImageDrawRoundRect
- ImageDrawText
- ImageFlip
- ImageGetBlob
- ImageGetBufferedImage
- ImageGetEXIFMetadata
- ImageGetEXIFTag
- ImageGetHeight
- ImageGetIPTCMetadata
- ImageGetIPTCTag
- ImageGetMetadata
- ImageGetWidth
- ImageGrayscale
- ImageInfo
- ImageMakeColorTransparent
- ImageMakeTranslucent
- ImageNegative
- ImageNew
- ImageOverlay
- ImagePaste
- ImageRead
- ImageReadBase64
- ImageResize
- ImageRotate
- ImageRotateDrawingAxis
- ImageScaleToFit
- ImageSetAntialiasing
- ImageSetBackgroundColor
- ImageSetDrawingColor
- ImageSetDrawingStroke
- ImageSetDrawingTransparency
- ImageSharpen
- ImageShear
- ImageShearDrawingAxis
- ImageTranslate
- ImageTranslateDrawingAxis
- ImageWrite
- ImageWriteBase64
- ImageXORDrawingMode
- Functions-in-k
- IncrementValue
- InputBaseN
- Insert
- Int
- InterruptThread
- InvalidateOauthAccesstoken
- Invoke
- InitSAMLAuthRequest
- InitSAMLLogoutRequest
- InvokeCFClientFunction
- IsArray
- IsAuthenticated
- IsAuthorized
- IsBinary
- IsBoolean
- IsClosure
- IsCustomFunction
- IsDate
- IsDateObject
- IsDDX
- IsDebugMode
- IsDefined
- IsImage
- IsImageFile
- IsInstanceOf
- IsIPv6
- IsJSON
- IsK2ServerABroker
- IsK2ServerDocCountExceeded
- IsK2ServerOnline
- IsLeapYear
- IsLocalHost
- IsNull
- IsNumeric
- IsNumericDate
- IsObject
- isOnline
- IsPDFArchive
- IsPDFFile
- IsPDFObject
- IsProtected
- IsQuery
- isSamlLogoutResponse
- isSafeHTML
- IsSimpleValue
- IsSOAPRequest
- IsSpreadsheetFile
- IsSpreadsheetObject
- IsStruct
- isThreadInterrupted
- IsUserInAnyRole
- IsUserInRole
- IsUserLoggedIn
- IsValid
- IsValidOauthAccesstoken
- IsWDDX
- IsXML
- IsXmlAttribute
- IsXmlDoc
- IsXmlElem
- IsXmlNode
- IsXmlRoot
- JavaCast
- JSStringFormat
- Functions-l
- LCase
- Left
- Len
- ListAppend
- ListChangeDelims
- ListContains
- ListContainsNoCase
- ListDeleteAt
- ListEach
- ListFilter
- ListFind
- ListFindNoCase
- ListFirst
- ListGetAt
- ListGetDuplicates
- ListInsertAt
- ListLast
- ListLen
- ListMap
- ListPrepend
- ListQualify
- ListReduce
- ListRemoveDuplicates
- ListRest
- ListSetAt
- ListSort
- ListToArray
- ListValueCount
- ListValueCountNoCase
- LJustify
- Location
- Log
- Log10
- LSCurrencyFormat
- LSDateFormat
- LSDateTimeFormat
- LSEuroCurrencyFormat
- LSIsCurrency
- LSIsDate
- LSIsNumeric
- LSNumberFormat
- LSParseCurrency
- LSParseDateTime
- LSParseEuroCurrency
- LSParseNumber
- LSTimeFormat
- LTrim
- Functions-m-r
- Max
- Mid
- Min
- Minute
- Month
- MonthAsString
- Now
- NumberFormat
- ObjectEquals
- ObjectLoad
- ObjectSave
- OnWSAuthenticate
- ORMClearSession
- ORMCloseAllSessions
- ORMCloseSession
- ORMEvictCollection
- ORMEvictEntity
- ORMEvictQueries
- ORMExecuteQuery
- ORMFlush
- ORMFlushall
- ORMGetSession
- ORMGetSessionFactory
- ORMIndex
- ORMIndexPurge
- ORMReload
- ORMSearch
- ORMSearchOffline
- ParagraphFormat
- ParameterExists
- ParseDateTime
- Pi
- PrecisionEvaluate
- ProcessSAMLResponse
- ProcessSAMLLogoutRequest
- Quarter
- PreserveSingleQuotes
- QueryAddColumn
- QueryAddRow
- QueryConvertForGrid
- QueryExecute
- QueryFilter
- QueryGetResult
- QueryGetRow
- QueryKeyExists
- QueryMap
- QueryNew
- QueryReduce
- QuerySetCell
- QuotedValueList
- QueryEach
- Rand
- Randomize
- RandRange
- ReEscape
- REFind
- REFindNoCase
- ReleaseComObject
- REMatch
- REMatchNoCase
- RemoveCachedQuery
- RemoveChars
- RepeatString
- Replace
- ReplaceList
- ReplaceNoCase
- REReplace
- REReplaceNoCase
- RestDeleteApplication
- RestSetResponse
- RestInitApplication
- Reverse
- Right
- RJustify
- Round
- RTrim
- Functions-s
- Second
- SendGatewayMessage
- SendSAMLLogoutResponse
- Serialize
- SerializeJSON
- SerializeXML
- SessionInvalidate
- SessionRotate
- SessionGetMetaData
- SessionInvalidate
- SessionRotate
- SetDay
- SetEncoding
- SetHour
- SetLocale
- SetMonth
- SetProfileString
- SetPropertyString
- SetVariable
- SetYear
- Sgn
- Sin
- Sleep
- SpanExcluding
- SpanIncluding
- SpreadsheetAddAutoFilter
- SpreadsheetAddColumn
- SpreadsheetAddFreezePane
- SpreadsheetAddImage
- SpreadsheetAddInfo
- SpreadsheetAddPageBreaks
- SpreadsheetAddRow
- SpreadsheetAddRows
- SpreadsheetAddSplitPane
- SpreadsheetCreateSheet
- SpreadsheetDeleteColumn
- SpreadsheetDeleteColumns
- SpreadsheetDeleteRow
- SpreadsheetDeleteRows
- SpreadsheetFormatCell
- SpreadsheetFormatColumn
- SpreadsheetFormatCellRange
- SpreadsheetFormatColumn
- SpreadsheetFormatColumns
- SpreadsheetFormatRow
- SpreadsheetFormatRows
- SpreadsheetGetCellComment
- SpreadsheetGetCellFormula
- SpreadsheetGetCellValue
- SpreadsheetGetColumnCount
- SpreadsheetInfo
- SpreadsheetMergeCells
- SpreadsheetNew
- SpreadsheetRead
- SpreadsheetReadBinary
- SpreadsheetRemoveSheet
- SpreadsheetSetActiveSheet
- SpreadsheetSetActiveSheetNumber
- SpreadsheetSetCellComment
- SpreadsheetSetCellFormula
- SpreadsheetSetCellValue
- SpreadsheetSetColumnWidth
- SpreadsheetSetFooter
- SpreadsheetSetHeader
- SpreadsheetSetRowHeight
- SpreadsheetShiftColumns
- SpreadsheetShiftRows
- SpreadsheetWrite
- StreamingSpreadsheetNew
- StreamingSpreadsheetCleanup
- StreamingSpreadsheetRead
- StreamingSpreadsheetProcess
- SpreadsheetSetFooterImage
- SpreadsheetSetHeaderImage
- SpreadsheetSetFittoPage
- SpreadsheetUngroupColumns
- SpreadsheetGroupColumns
- SpreadsheetUngroupRows
- SpreadsheetGroupRows
- SpreadsheetRemoveColumnBreak
- SpreadsheetSetColumnBreak
- SpreadsheetRemoveRowBreak
- SpreadsheetSetRowBreak
- SpreadsheetRemovePrintGridlines
- SpreadsheetAddPrintGridlines
- SpreadsheetGetColumnWidth
- SpreadsheetSetColumnHidden
- SpreadsheetSetRowHidden
- SpreadsheetisColumnHidden
- SpreadsheetisRowHidden
- SpreadsheetisStreamingXmlFormat
- SpreadsheetisXmlFormat
- SpreadsheetisBinaryFormat
- SpreadsheetRenameSheet
- SpreadsheetRemoveSheetNumber
- SpreadsheetGetLastRowNumber
- SpreadsheetGetPrintOrientation
- Sqr
- StripCR
- StructAppend
- StructClear
- StructCopy
- StructCount
- StructDelete
- StructEach
- StructFilter
- StructFind
- StructFindKey
- StructFindValue
- StructGet
- StructGetMetadata
- StructInsert
- StructIsEmpty
- StructKeyArray
- StructKeyExists
- StructKeyList
- StructMap
- StructNew
- StructReduce
- StructSetMetadata
- StructSort
- StructToSorted
- StructUpdate
- StructValueArray
- StoreSetMetadata
- StoreGetACL
- StoreGetMetadata
- StoreAddACL
- StoreSetACL
- Functions-t-z
- Tan
- ThreadJoin
- ThreadTerminate
- Throw
- TimeFormat
- ToBase64
- ToBinary
- ToScript
- ToString
- Trace
- Transactionandconcurrency
- TransactionCommit
- TransactionRollback
- TransactionSetSavePoint
- Trim
- UCase
- URLDecode
- URLEncodedFormat
- URLSessionFormat
- Val
- ValueList
- VerifyClient
- Week
- Wrap
- WriteDump
- WriteLog
- WriteOutput
- WSGetAllChannels
- WSGetSubscribers
- WSPublish
- WSSendMessage
- XmlChildPos
- XmlElemNew
- XmlFormat
- XmlGetNodeType
- XmlNew
- XmlParse
- XmlSearch
- XmlTransform
- XmlValidate
- Year
- YesNoFormat
- ColdFusion tags
- ColdFusion tag summary
- ColdFusion tags by category
- Application framework tags
- Communications tags
- Database manipulation tags
- Data output tags
- Debugging tags
- Exception handling tags
- Extensibility tags
- File management tags
- Flow-control tags
- Forms tags
- Internet Protocol tags
- Page processing tags
- Security tags
- Variable manipulation tags
- Other tags
- Tags a-b
- Tags c
- cfcache
- cfcalendar
- cfcase
- cfcatch
- cfchart
- cfchart tag in ColdFusion
- Get started with cfchart
- Customize a chart using cfchart
- Advanced cfchart customization options
- Create an area chart in ColdFusion
- Create line charts in ColdFusion
- Create bar charts in ColdFusion
- Create floating bar charts in ColdFusion
- Create histograms in ColdFusion
- Create pie charts in ColdFusion
- Create funnel charts in ColdFusion
- Create pyramid charts in ColdFusion
- Create curve charts in ColdFusion
- Create boxplots in ColdFusion
- Create donut charts in ColdFusion
- Create bubble charts in ColdFusion
- Create scatterplots in ColdFusion
- Create radar charts in ColdFusion
- Other chart types in ColdFusion (Cone, Cylinder, Piano, and Bullet)
- Advanced customization options in cfchart
- cfchartdata
- cfchartseries
- cfchartset
- cfclient
- cfclientsettings
- cfcol
- cfcollection
- cfcomponent
- cfcontent
- cfcontinue
- cfcookie
- Tags f
- cffeed
- cffile
- cffile action = "append"
- cffile action = "copy"
- cffile action = "delete"
- cffile action = "move"
- cffile action = "read"
- cffile action = "readBinary"
- cffile action = "rename"
- cffile action = "upload"
- cffile action = "uploadAll"
- cffile action = "write"
- cffileupload
- cffinally
- cfflush
- cfform
- cfformgroup
- cfformitem
- cfftp
- cfftp: Connection: file and directory operations
- cfftp: Opening and closing FTP server connections
- cfftp : Opening and closing secure FTP server connections
- cfftp action = "listDir"
- cffunction
- Tags g-h
- Tags i
- Tags j-l
- cfjava
- cflayout
- cflayoutarea
- cfldap
- cflocation
- cflock
- cflog
- cflogin
- cfloginuser
- cflogout
- cfloop
- cfloop : conditional loop
- cfloop : index loop
- cfloop : looping over a COM collection or structure
- cfloop : looping over a date or time range
- cfloop : looping over a list, a file, or an array
- cfloop : looping over a query
- Tags m-o
- cfmail
- cfmailparam
- cfmailpart
- cfmap
- cfmapitem
- cfmediaplayer
- cfmenu
- cfmenuitem
- cfmessagebox
- cfmodule
- cfNTauthenticate
- cfoauth
- cfobject
- cfobject: .NET object
- cfobject: COM object
- cfobject: component object
- cfobject: CORBA object
- cfobject: Java or EJB object
- cfobject: web service object
- cfobjectcache
- cfoutput
- Tags p-q
- Tags r-s
- Tags t
- Tags u-z
- CFML Reference
- Reserved words and variables
- Ajax JavaScript functions
- Ajax JavaScript functions
- Function summary Ajax
- ColdFusion.Ajax.submitForm
- ColdFusion.Autosuggest.getAutosuggestObject
- ColdFusion.Layout.enableSourceBind
- ColdFusion.MessageBox.getMessageBoxObject
- ColdFusion.ProgressBar.getProgressBarObject
- ColdFusion.MessageBox.isMessageBoxDefined
- JavaScriptFunctionsinColdFusion9Update1
- ColdFusion ActionScript functions
- ColdFusion mobile functions
- Application.cfc reference
- Script functions implemented as CFCs
- ColdFusion Flash Form style reference
- Styles valid for all controls
- Styles for cfform
- Styles for cfformgroup with horizontal or vertical type attributes
- Styles for box-style cfformgroup elements
- Styles for cfformgroup with accordion type attribute
- Styles for cfformgroup with tabnavigator type attribute
- Styles for cfformitem with hrule or vrule type attributes
- Styles for cfinput with radio, checkbox, button, image, or submit type attributes
- Styles for cftextarea tag and cfinput with text, password, or hidden type attributes
- Styles for cfselect with size attribute value of 1
- Styles for cfselect with size attribute value greater than 1
- Styles for cfcalendar tag and cfinput with dateField type attribute
- Styles for the cfgrid tag
- Styles for the cftree tag
- ColdFusion Flash Form Style Reference
- ColdFusion event gateway reference
- ColdFusion Event Gateway reference
- addEvent
- CFEvent
- CFEventclass
- Constructor
- Gateway development interfaces and classes
- getStatus
- setCFCPath
- setCFCMethod
- getOriginatorID
- getLogger
- getBuddyList
- getBuddyInfo
- IM gateway message sending commands
- IM Gateway GatewayHelper class methods
- onIncomingMessage
- onIMServerMessage
- onBuddyStatus
- onAddBuddyResponse
- onAddBuddyRequest
- IM Gateway CFC incoming message methods
- IM gateway methods and commands
- CFML CFEvent structure
- warn
- info
- setOriginatorID
- data command
- submit Multi command
- submit command
- setGatewayType
- setGatewayID
- setData
- setCFCListeners
- outgoingMessage
- getStatusTimeStamp
- numberOfMessagesReceived
- numberOfMessagesSent
- removeBuddy
- removeDeny
- removePermit
- setNickName
- setPermitMode
- setStatus
- SMS Gateway CFEvent structure and commands
- SMS Gateway incoming message CFEvent structure
- getStatusAsString
- getProtocolName
- getPermitMode
- getPermitList
- getNickName
- getName
- getDenyList
- getCustomAwayMessage
- getQueueSize
- getMaxQueueSize
- getHelper
- getGatewayType
- getGatewayServices
- getGatewayID_1
- getGatewayID
- getData
- getCFCTimeout
- setCFCTimeout
- getCFCPath
- getCFCMethod
- GatewayServices class
- Gateway interface
- GatewayHelper interface
- addPermit
- addDeny
- addBuddy
- error
- debug
- Logger class
- stop
- start
- CFML event gateway SendGatewayMessage data parameter
- restart
- fatal
- SMS gateway message sending commands
- ColdFusion C++ CFX Reference
- ColdFusion Java CFX reference
- WDDX JavaScript Objects
- Cloud services
- ColdFusion and GCP Storage
- ColdFusion and GCP Firestore
- ColdFusion and GCP PubSub
- ColdFusion and Amazon S3
- ColdFusion and DynamoDB
- ColdFusion and Amazon SQS
- ColdFusion and Amazon SNS
- ColdFusion and MongoDB
- ColdFusion and Azure Blob
- ColdFusion and Azure Service Bus
- Multi-cloud storage services
- Multi-cloud RDS databases
- ColdFusion and Azure Cosmos DB
Description
Returns up to the leftmost count characters in a string.
Returns
String; up to the first count characters in the string parameter.
Category
Function syntax
Left(string, count)
<cfscript>
myString=Left("That's one small step for man, one giant leap for mankind.",25);
WriteOutput(myString);
</cfscript>
Output
That's one small step for
Real-world uses of the Left function
Content management and article previews
A digital publishing platform manages thousands of articles, blog posts, and news stories that need to be displayed across multiple interfaces including homepage cards, mobile apps, email newsletters, and social media feeds. Each display context requires different text length limits for optimal user experience and layout consistency.
How it helps:
- All content displays uniformly across different interface components
- Only the necessary text is processed and transmitted
- Users can quickly scan and find relevant content
- Well-crafted previews increase click-through rates
<cfscript>
// Simple Content Preview Generation with Left
// Business: Create article previews for different display contexts
// Sample articles with varying content lengths
articles = [
{
title: "Revolutionary AI Technology Transforms Healthcare Industry with Groundbreaking Innovations",
content: "In a landmark development that promises to reshape modern healthcare, researchers have successfully implemented AI systems that can diagnose complex conditions with unprecedented accuracy. The new technology combines machine learning algorithms with advanced medical imaging, demonstrating remarkable success in early trials.",
author: "Dr. Sarah Johnson"
},
{
title: "Local Restaurant Chain Expands Operations",
content: "Springfield's beloved pizza restaurant 'Tony's Kitchen' announced plans to open three new locations across the metropolitan area this summer.",
author: "Mike Chen"
}
];
// Simple preview generation function
function createPreview(article, context) {
var preview = "";
switch(context) {
case "homepage":
preview = "Homepage Card:<br>";
preview &= "<strong>Title:</strong> " & Left(article.title, 40) & "...<br>";
preview &= "<strong>Content:</strong> " & Left(article.content, 100) & "...<br>";
break;
case "mobile":
preview = "Mobile View:<br>";
preview &= "<strong>Title:</strong> " & Left(article.title, 30) & "...<br>";
preview &= "<strong>Content:</strong> " & Left(article.content, 80) & "...<br>";
break;
case "email":
preview = "Email Newsletter:<br>";
preview &= "<strong>Title:</strong> " & Left(article.title, 50) & "...<br>";
preview &= "<strong>Content:</strong> " & Left(article.content, 150) & "...<br>";
break;
}
preview &= "<strong>Author:</strong> " & article.author;
return preview;
}
</cfscript>
<cfoutput>
<h1>📝 Left Function: Content Preview Demo</h1>
<p><strong>Business Need:</strong> Create consistent article previews for different platforms</p>
<p><strong>Challenge:</strong> Articles vary greatly in title and content length</p>
<p><strong>Solution:</strong> Use Left() to extract specific character counts for each context</p>
<hr>
</cfoutput>
<cfloop array="#articles#" index="i" item="article">
<cfoutput>
<h2>Article #i#: Original Content</h2>
<div style="background: ##f8f9fa; padding: 15px; border: 1px solid ##ddd;">
<p><strong>Title:</strong> #article.title# <em>(#len(article.title)# characters)</em></p>
<p><strong>Content:</strong> #article.content# <em>(#len(article.content)# characters)</em></p>
<p><strong>Author:</strong> #article.author#</p>
</div>
<h3>Preview Examples</h3>
<div style="display: flex; gap: 15px; margin: 20px 0;">
<div style="background: ##e3f2fd; padding: 15px; border-radius: 5px; width: 300px;">
#createPreview(article, "homepage")#
</div>
<div style="background: ##f3e5f5; padding: 15px; border-radius: 5px; width: 250px;">
#createPreview(article, "mobile")#
</div>
<div style="background: ##e8f5e8; padding: 15px; border-radius: 5px; width: 350px;">
#createPreview(article, "email")#
</div>
</div>
<hr>
</cfoutput>
</cfloop>
<cfoutput>
<h2>✅ Key Benefits</h2>
<ul>
<li><strong>Consistent Layout:</strong> All previews fit their designated spaces</li>
<li><strong>Responsive Design:</strong> Different lengths for different screen sizes</li>
<li><strong>Fast Loading:</strong> Only necessary text is processed and displayed</li>
<li><strong>Professional Appearance:</strong> Clean, uniform preview cards</li>
</ul>
<div style="background: ##fff3cd; padding: 15px; border-radius: 5px; margin-top: 20px;">
<h3>💡 The Left Pattern for Content</h3>
<code>
// Extract first 40 characters for homepage<br>
title = Left(originalTitle, 40) & "...";<br><br>
// Different lengths for different contexts<br>
mobileTitle = Left(originalTitle, 30);<br>
emailTitle = Left(originalTitle, 50);
</code>
</div>
</cfoutput>
Product catalog and SKU management
A large eCommerce retailer manages 100,000+ products across multiple departments with complex SKU (Stock Keeping Unit) systems. Each product SKU contains encoded information about department, category, brand, and product type that needs to be extracted for inventory management, reporting, and automated categorization.
How it helps:
- No manual intervention needed for department categorization
- Inventory and orders are automatically directed to the correct departments
- Clean category data allows better business intelligence
- Standardized SKU processing across all business systems
<cfscript>
// Simple SKU Processing with Left
// Business: Extract department codes from product SKUs
// Sample products with structured SKUs
products = [
{sku: "ELEC-TV-SAMSUNG-55IN-001", name: "Samsung 55-inch TV", price: 799.99},
{sku: "HOME-FURN-SOFA-LEATHER", name: "Leather Sofa", price: 1299.99},
{sku: "APRL-SHIRT-MENS-BLUE-L", name: "Men's Blue Shirt", price: 29.99},
{sku: "BOOK-FICTION-MYSTERY", name: "Mystery Novel", price: 24.95}
];
// Department lookup
departments = {
"ELEC": {name: "Electronics", manager: "Sarah Johnson", color: "##4caf50"},
"HOME": {name: "Home & Garden", manager: "Mike Rodriguez", color: "##ff9800"},
"APRL": {name: "Apparel", manager: "Lisa Chen", color: "##9c27b0"},
"BOOK": {name: "Books & Media", manager: "David Wilson", color: "##2196f3"}
};
// Simple SKU processing function
function processSKU(product) {
// Extract department code using Left()
var deptCode = Left(product.sku, 4);
var result = "SKU: " & product.sku & "<br>";
result &= "Department Code: <strong>" & deptCode & "</strong><br>";
if (structKeyExists(departments, deptCode)) {
var dept = departments[deptCode];
result &= "Department: " & dept.name & "<br>";
result &= "Manager: " & dept.manager & "<br>";
result &= "Status: ✅ Routed Successfully";
} else {
result &= "Status: ❌ Unknown Department";
}
return result;
}
</cfscript>
<cfoutput>
<h1>🏢 Left Function: SKU Processing Demo</h1>
<p><strong>Business Need:</strong> Route products to correct departments based on SKU codes</p>
<p><strong>Challenge:</strong> Extract department codes from complex product SKUs</p>
<p><strong>Solution:</strong> Use Left() to get the first 4 characters (department code)</p>
<hr>
</cfoutput>
<cfloop array="#products#" index="product">
<cfscript>
deptCode = Left(product.sku, 4);
dept = structKeyExists(departments, deptCode) ? departments[deptCode] : {color: "##757575"};
</cfscript>
<cfoutput>
<h3>#product.name# - $#numberFormat(product.price, "0.00")#</h3>
<div style="background: ##f5f5f5; padding: 15px; margin: 10px 0; border-left: 5px solid #dept.color#;">
#processSKU(product)#
</div>
</cfoutput>
</cfloop>
<cfoutput>
<h2>Department Summary</h2>
<div style="display: flex; gap: 15px; margin: 20px 0;">
</cfoutput>
<cfloop collection="#departments#" item="code">
<cfscript>
dept = departments[code];
// Count products for this department
productCount = 0;
for (product in products) {
if (Left(product.sku, 4) == code) {
productCount++;
}
}
</cfscript>
<cfoutput>
<div style="background: #dept.color#; color: white; padding: 15px; border-radius: 5px; text-align: center;">
<h4 style="color: white; margin-top: 0;">#code#</h4>
<p style="color: white;">#dept.name#</p>
<p style="color: white;">Products: #productCount#</p>
<p style="color: white; margin-bottom: 0;">Manager: #dept.manager#</p>
</div>
</cfoutput>
</cfloop>
User Interface and data display
A customer relationship management (CRM) system serves sales teams managing thousands of client accounts with varying data completeness. The system displays client information across multiple interface components including tables, cards, mobile views, and dashboard widgets, each with different space constraints and user requirements.
How it helps:
- Clean, consistent interface regardless of data variation
- Users can quickly scan information without layout distractions
- Excellent experience across all device types
- Faster rendering and reduced memory usage
<cfscript>
// Simple UI Display Optimization with Left
// Business: Format client data for consistent display
// Sample client data with varying field lengths
clients = [
{
"company": "Global Technology Solutions International Corporation LLC",
"contact": "Dr. Elizabeth Alexandra Montgomery-Richardson III",
"address": "1234 International Business Park Drive, Suite 567",
"phone": "+1-555-123-4567 ext. 8901"
},
{
"company": "Smith & Associates",
"contact": "John Smith",
"address": "123 Main St, Anytown, ST",
"phone": "555-987-6543"
},
{
"company": "Advanced Research Laboratory for Technologies",
"contact": "Prof. Dr. Maria Rodriguez-Fernandez",
"address": "9876 University Campus Boulevard, Building 15",
"phone": "+1-555-RESEARCH (737-3272)"
}
];
// Simple formatting function for different contexts
function formatForDisplay(clientData, displayType) {
var formatted = {};
switch(displayType) {
case "table":
formatted.company = Left(clientData["company"], 25) & "...";
formatted.contact = Left(clientData["contact"], 20) & "...";
formatted.address = Left(clientData["address"], 30) & "...";
formatted.phone = Left(clientData["phone"], 15) & "...";
formatted.context = "Data Table";
formatted.width = "600px";
break;
case "card":
formatted.company = Left(clientData["company"], 30) & "...";
formatted.contact = Left(clientData["contact"], 25) & "...";
formatted.address = Left(clientData["address"], 35) & "...";
formatted.phone = clientData["phone"]; // Keep full phone
formatted.context = "Dashboard Card";
formatted.width = "350px";
break;
case "mobile":
formatted.company = Left(clientData["company"], 20) & "...";
formatted.contact = Left(clientData["contact"], 18) & "...";
formatted.address = Left(clientData["address"], 25) & "...";
formatted.phone = Left(clientData["phone"], 12) & "...";
formatted.context = "Mobile View";
formatted.width = "280px";
break;
}
return formatted;
}
</cfscript>
<cfoutput>
<h1>📱 Left Function: UI Display Demo</h1>
<p><strong>Business Need:</strong> Display client data consistently across different interfaces</p>
<p><strong>Challenge:</strong> Client information varies dramatically in length</p>
<p><strong>Solution:</strong> Use Left() to create uniform field lengths for clean layouts</p>
<hr>
</cfoutput>
<cfloop array="#clients#" index="i" item="clientData">
<cfoutput>
<h2>Client #i#: Original Data</h2>
<div style="background: ##fff3cd; padding: 15px; border: 1px solid ##ffc107;">
<p><strong>Company:</strong> #clientData["company"]# <em>(#len(clientData["company"])# chars)</em></p>
<p><strong>Contact:</strong> #clientData["contact"]# <em>(#len(clientData["contact"])# chars)</em></p>
<p><strong>Address:</strong> #clientData["address"]# <em>(#len(clientData["address"])# chars)</em></p>
<p><strong>Phone:</strong> #clientData["phone"]# <em>(#len(clientData["phone"])# chars)</em></p>
</div>
<h3>Formatted Display Examples</h3>
<div style="display: flex; gap: 15px; margin: 20px 0; flex-wrap: wrap;">
</cfoutput>
<cfscript>
displayTypes = ["table", "card", "mobile"];
</cfscript>
<cfloop array="#displayTypes#" index="displayType">
<cfscript>
formatted = formatForDisplay(clientData, displayType);
</cfscript>
<cfoutput>
<div style="background: ##f0f8ff; padding: 15px; border-radius: 5px; width: #formatted.width#; border: 1px solid ##87ceeb;">
<h4 style="margin-top: 0; color: ##0066cc;">#formatted.context#</h4>
<p><strong>Company:</strong> #formatted.company#</p>
<p><strong>Contact:</strong> #formatted.contact#</p>
<p><strong>Address:</strong> #formatted.address#</p>
<p><strong>Phone:</strong> #formatted.phone#</p>
</div>
</cfoutput>
</cfloop>
<cfoutput>
</div>
<hr>
</cfoutput>
</cfloop>
Data processing and file management
A financial services company processes thousands of daily transaction files from multiple banks, payment processors, and financial institutions. Each file follows naming conventions that encode critical information about source, date, transaction type, and processing requirements that must be extracted for automated routing and processing.
How it helps:
- Complete automation of file categorization and routing
- Accurate file tracking and regulatory reporting
- Systematic processing eliminates human categorization errors
- Immediate file routing without delays or bottlenecks
<cfscript>
// Simple File Management with Left
// Business: Route transaction files based on filename prefixes
// Sample transaction files
transactionFiles = [
{"filename": "CC_VISA_20240115_BATCH001.txt", "size": "2.3 MB", "records": 1547},
{"filename": "ACH_NACHA_20240115_RETURNS.csv", "size": "856 KB", "records": 892},
{"filename": "WIRE_SWIFT_20240115_INCOMING.xml", "size": "1.1 MB", "records": 234},
{"filename": "MRCH_DAILY_20240115_SUMMARY.pdf", "size": "3.7 MB", "records": 5623}
];
// Processing systems lookup
processors = {
"CC": {"name": "Credit Card Processor", "system": "CardPro", "color": "##4caf50"},
"ACH": {"name": "ACH Transfer System", "system": "BankGateway", "color": "##2196f3"},
"WIRE": {"name": "Wire Transfer System", "system": "SwiftNet", "color": "##f44336"},
"MRCH": {"name": "Merchant Reports", "system": "ReportEngine", "color": "##ff9800"}
};
// Simple file processing function
function processFile(fileData) {
// Extract file type prefix using Left()
var fileType = Left(fileData["filename"], find("_", fileData["filename"]) - 1);
var result = "Filename: " & fileData["filename"] & "<br>";
result &= "File Type: <strong>" & fileType & "</strong><br>";
result &= "Size: " & fileData["size"] & " | Records: " & numberFormat(fileData["records"], "0,0") & "<br>";
if (structKeyExists(processors, fileType)) {
var processor = processors[fileType];
result &= "Processor: " & processor["name"] & "<br>";
result &= "System: " & processor["system"] & "<br>";
result &= "Status: ✅ Routed Successfully";
} else {
result &= "Status: ❌ Unknown File Type - Manual Review Required";
}
return result;
}
</cfscript>
<cfoutput>
<h1>📊 Left Function: File Management Demo</h1>
<p><strong>Business Need:</strong> Automatically route transaction files to correct processing systems</p>
<p><strong>Challenge:</strong> Different file types need different processing systems</p>
<p><strong>Solution:</strong> Use Left() to extract file type codes from filenames</p>
<hr>
</cfoutput>
<cfloop array="#transactionFiles#" index="fileData">
<cfscript>
fileType = Left(fileData["filename"], find("_", fileData["filename"]) - 1);
processor = structKeyExists(processors, fileType) ? processors[fileType] : {"color": "##757575"};
</cfscript>
<cfoutput>
<h3>Transaction File: #fileData["filename"]#</h3>
<div style="background: ##f9f9f9; padding: 15px; margin: 10px 0; border-left: 5px solid #processor["color"]#;">
#processFile(fileData)#
</div>
</cfoutput>
</cfloop>
<cfoutput>
<h2>Processing Systems Summary</h2>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 20px 0;">
</cfoutput>
<cfloop collection="#processors#" item="code">
<cfscript>
processor = processors[code];
// Count files for this processor
fileCount = 0;
totalRecords = 0;
for (fileData in transactionFiles) {
fileTypeCode = Left(fileData["filename"], find("_", fileData["filename"]) - 1);
if (fileTypeCode == code) {
fileCount++;
totalRecords += fileData["records"];
}
}
</cfscript>
<cfoutput>
<div style="background: #processor["color"]#; color: white; padding: 15px; border-radius: 5px; text-align: center;">
<h4 style="color: white; margin-top: 0;">#code#</h4>
<p style="color: white;">#processor["name"]#</p>
<p style="color: white;">Files: #fileCount#</p>
<p style="color: white;">Records: #numberFormat(totalRecords, "0,0")#</p>
<p style="color: white; margin-bottom: 0;">#processor["system"]#</p>
</div>
</cfoutput>
</cfloop>
