All tables are global, i.e. accessible by called procedure and functions, no matter in which code file they are running, and retained if created inside user-defined procedures and functions and then returned.
The tables are fully stored and managed in working memory (dynamic RAM). In case you work with very large tables and your system has not enough memory space, the operating system will move data to the page file in order to provide additional space. With the very large memory space available systems, this should not be an issue for most applications. B4P uses full 64-bit performance, so you will not encounter the 4GB limit.
Row counting starts with 0 (row 0 is the header row).
Tables may contain any number of rows, including 0 (= no) row.
Negative indexing is supported for referencing row numbers. -1 refers to the last row in the table, -2 to the next one above, etc.
Blank rows are allowed
Column counting starts with 0.
Negative indexing is supported for referencing column numbers. -1 refers to the last column in the table, -2 to the next one to the left, etc.
The rows may contain different number of columns.
The number of entries in a table row may exceed the number of header entries, but in this case these entries cannot be identified by column header names. They can only be accessed with column numbers.
Blank columns are allowed
Multiple identical column header names are allowed, but referencing them by names will always match with the first occurrence (from left to right).
Tables loaded, e.g. from HTML, XML, Excel, contain no formatting attributes (e.g. font size, frame and cell background color, alignments, typefaces like bold, underline, etc.). However, before saving the tables, you may want to append formatting attributes which will then be parts of the data contents. See the section on styles.
Regarding tables loaded from Excel files: The calculated values will be loaded and not the underlying formulas.
The function table configure() is available to change table-specific properties.