The [[LEN]] function returns the number of bytes used by a variable value and the number of characters in a [[STRING]]. {{PageSyntax}} : {{Parameter|length%}} = [[LEN]]({{Parameter|literalTextOrVariable}}) * Literal or variable [[STRING]] values return the number of string bytes which is the same as the number of string characters. * A numerical ''variable'' will return the number of bytes used by a numerical variable type. ** [[_BYTE]] variable types return 1 byte. ** [[INTEGER]] variable types return 2 bytes. ** [[SINGLE]] and [[LONG]] integer variable types return 4 bytes. ** [[DOUBLE]] and [[_INTEGER64]] variable types return 8 bytes. ** [[_FLOAT]] variable types return 32 bytes. ** [[_OFFSET]] and [[_MEM]] variable types return varying byte sizes. ** ''Note:'' [[_BIT]] variable types and bit multiples '''cannot be measured in bytes'''. * '''LEN cannot return lengths of literal numerical values and will create a "variable required" status error in the IDE.''' * '''LEN =''' can be used with a user defined [[TYPE]] variable to determine the number of bytes used in [[RANDOM]] file records: :::: {{InlineCode}}[[OPEN]] file$ FOR [[RANDOM]] AS #n LEN <nowiki>=</nowiki> LEN(recordTypeVariable){{InlineCodeEnd}}''' :* If a LEN = statement is not used, [[RANDOM]] default record length is 128 or sequencial is 512 up to a maximum of 32767 bytes. :* [[BINARY]] OPEN statements will ignore LEN = statements. The byte size of a [[GET|read]] or [[PUT|write]] is determined by the [[Variable Types|variable type]]. {{PageExamples}} ''Example 1:'' With a string variable the byte size is the same as the number of characters. {{CodeStart}} LastName$ = "Williams" PRINT {{Cl|LEN}}(LastName$); "bytes" '' '' {{CodeEnd}} {{OutputStart}} 8 bytes {{OutputEnd}} ''Example 2:'' Testing [[INPUT]] for numerical [[STRING]] entries from a user. {{CodeStart}} '' '' {{Cl|INPUT}} "number: ", num$ value$ = {{Cl|LTRIM$}}({{Cl|STR$}}({{Cl|VAL}}(num$))) L = {{Cl|LEN}}(value$) {{Cl|PRINT}} {{Cl|LEN}}(num$), L '' '' {{CodeEnd}} : ''Note:'' [[&H]], [[&O]], D and E will also be accepted as numerical type data in a [[VAL]] conversion, but will add to the entry length. ''Example 3:'' With numerical value types you MUST use a variable to find the inherent byte length when using LEN. {{CodeStart}} '' '' DIM I AS INTEGER PRINT "INTEGER ="; LEN(I); "bytes" DIM L AS LONG PRINT "LONG ="; LEN(L); "bytes" DIM I64 AS _INTEGER64 PRINT "_INTEGER64 ="; LEN(I64); "bytes" DIM S AS SINGLE PRINT "SINGLE ="; LEN(S); "bytes" DIM D AS DOUBLE PRINT "DOUBLE ="; LEN(D); "bytes" DIM F AS _FLOAT PRINT "_FLOAT ="; LEN(F); "bytes" '' '' {{CodeEnd}} {{OutputStart}}INTEGER = 2 bytes LONG = 4 bytes _INTEGER64 = 8 bytes SINGLE = 4 bytes DOUBLE = 8 bytes _FLOAT = 32 bytes {{OutputEnd}} ''Example 4:'' Opening a RANDOM file using LEN to calculate and LEN = to designate the file record size. {{CodeStart}} '' '' {{Cl|TYPE}} variabletype x {{Cl|AS}} {{Cl|INTEGER}}' '2 bytes y {{Cl|AS}} {{Cl|STRING}} * 10' '10 bytes z {{Cl|AS}} {{Cl|LONG}}' '4 bytes {{Cl|END}} {{Cl|TYPE}}' '16 bytes total {{Cl|DIM}} record {{Cl|AS}} variabletype {{Cl|DIM}} newrec {{Cl|AS}} variabletype file$ = "testrand.inf" '<<<< filename may overwrite existing file number% = 1 '<<<<<<<<<< record number to write cannot be zero RecordLEN% = {{Cl|LEN}}(record) {{Cl|PRINT}} RecordLEN%; "bytes" record.x = 255 record.y = "Hello world!" record.z = 65535 {{Cl|PRINT}} record.x, record.y, record.z {{Cl|OPEN}} file$ {{Cl|FOR...NEXT|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #1 {{Cl|LEN}} = RecordLEN% {{Cl|PUT}} #1, number% , record 'change record position number to add records {{Cl|CLOSE}} #1 {{Cl|OPEN}} file$ {{Cl|FOR...NEXT|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #2 {{Cl|LEN}} = RecordLEN% NumRecords% = {{Cl|LOF}}(2) \ RecordLEN% PRINT NumRecords%; "records" {{Cl|GET}} #2, NumRecords% , newrec 'GET last record available {{Cl|CLOSE}} #2 {{Cl|PRINT}} newrec.x, newrec.y, newrec.z {{Cl|END}} '' '' {{CodeEnd}} {{OutputStart}} 16 bytes 255 Hello worl 65535 1 records 255 Hello worl 65535 {{OutputEnd}} : ''Explanation:'' The byte size of the record [[TYPE]] determines the [[LOF]] byte size of the file and can determine the number of records. : To read the last record [[GET]] the number of records. To add a record, use the number of records + 1 to [[PUT]] new record data. {{PageSeeAlso}} * [[LOF]], [[EOF]] * [[AS]], [[TYPE]] * [[RANDOM]], [[BINARY]] * [[Variable Types]] {{PageNavigation}} <