---
product: Chilkat
product_version: 11.7.0
language: pascal
language_label: Lazarus Pascal
class: StringTable
license: free
deprecated: false
reference_html: https://www.chilkatsoft.com/refdoc/pascal_StringTableRef.html
---
# Chilkat StringTable — Lazarus Pascal — v11.7.0

> Chilkat 11.7.0 · language=pascal · class=StringTable
> Other versions: replace `11.7.0` in this URL. Other languages: `https://www.chilkatsoft.com/ai-docs/v/11.7.0/<lang>/classes/StringTable.md`.
> Language-wide rules (install, unlock, error model, strings/bytes): `https://www.chilkatsoft.com/ai-docs/v/11.7.0/pascal/guide.md`.

## Purpose

**Store, load, search, sort, split, retrieve, and save ordered lists of strings.**

`Chilkat.StringTable` is a simple ordered collection of strings. It can append strings directly, load one string per line from files or `StringBuilder`, search for substrings or wildcard matches, sort the collection, split strings into entries, retrieve strings by index, export the table as line-delimited text, and save the result to a file.

**Ordered string collection**

Store a list of strings in insertion order and retrieve individual entries by zero-based index.

**Append and import**

Add strings directly, append strings from a file, or load line-delimited text from a `StringBuilder`.

**Search strings**

Find entries containing a substring or matching a wildcard pattern when filtering or locating text values.

**Sort entries**

Sort the string collection when deterministic ordering or user-facing display order is needed.

**Split into entries**

Split delimited text into separate string-table entries for easier indexing, searching, sorting, or saving.

**Export and save**

Convert the table back to line-delimited text, copy it to a `StringBuilder`, or save the collection to a file.

**Common pattern:** Use `StringTable` when application code needs a lightweight ordered list of text values. Append or load the strings, search or sort as needed, retrieve entries by index with `StringAt` or `StringAtSb`, then export the final list as line-delimited text or save it to a file.

For an extended overview, see [StringTable Class Overview](https://www.chilkatsoft.com/stringtable_class_overview.asp).

## Object creation, unlocking and error handling

**Create / Free**

```pascal
uses
  Chilkat.StringTable;

var
  obj: TStringTable;
begin
  obj := TStringTable.Create;
  try
    if not obj.IsValid then
      raise Exception.Create('Failed to create a TStringTable instance.');

    // ... use obj ...

  finally
    obj.Free;
  end;
end;
```

`constructor Create;`

Allocates the underlying CkStringTable object and returns a new TStringTable instance. Simply adding **Chilkat.StringTable** to the unit's `uses` clause is enough to locate and bind to the Chilkat shared library (DLL / .so / .dylib) at runtime — no separate load step is required. Check `obj.IsValid` after calling `Create`; it is `False` if the underlying library could not be found/loaded or the object could not be allocated (for example, when unlicensed).

`destructor Destroy; override;`

Every TStringTable created by calling `Create` should eventually be released by calling `.Free` (inherited from `TObject`). The destructor automatically disposes the underlying CkStringTable handle. A native (unmanaged) memory leak occurs if the object is never freed.

Call `Global.UnlockBundle` once at the start of the program, before using this or any other Chilkat class. Any string unlocks a fully functional 30-day trial; a purchased unlock code is used in production. See `guide.md` for the exact code in Lazarus Pascal.

## Members common to every Chilkat class

Documented once per language in `common-members.md`; listed here so this page is self-contained.

| Property | Signature | Access | Meaning |
|---|---|---|---|
| `DebugLogFilePath` | `property DebugLogFilePath: string read GetDebugLogFilePath write SetDebugLogFilePath;` | read/write | If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. |
| `LastErrorHtml` | `property LastErrorHtml: string read GetLastErrorHtml;` | read-only | Provides HTML-formatted information about the last called method or property. |
| `LastErrorText` | `property LastErrorText: string read GetLastErrorText;` | read-only | Provides plain text information about the last called method or property. |
| `LastErrorXml` | `property LastErrorXml: string read GetLastErrorXml;` | read-only | Provides XML-formatted information about the last called method or property. |
| `LastMethodSuccess` | `property LastMethodSuccess: Boolean read GetLastMethodSuccess write SetLastMethodSuccess;` | read/write | Indicates the success or failure of the most recent method call: `True` means success, `False` means failure. |
| `VerboseLogging` | `property VerboseLogging: Boolean read GetVerboseLogging write SetVerboseLogging;` | read/write | If set to `True`, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. |
| `Version` | `property Version: string read GetVersion;` | read-only | Version of the component/library, such as "10.1.0" |

## Member index

| Member | Kind | Signature |
|---|---|---|
| `Count` | property, read-only | `property Count: Integer read GetCount;` |
| `Append` | method | `function Append(const value: string): Boolean;` |
| `AppendFromFile` | method | `function AppendFromFile(maxLineLen: Integer;     const charset: string;     const path: string): Boolean;` |
| `AppendFromSb` | method | `// sb is a TStringBuilder object. function AppendFromSb(sb: TChilkatBase): Boolean;` |
| `Clear` | method | `procedure Clear;` |
| `FindMatch` | method | `// sb is a TStringBuilder object. function FindMatch(sb: TChilkatBase;     caseSensitive: Boolean): Integer;` |
| `FindSubstring` | method | `function FindSubstring(startIndex: Integer;     const substr: string;     caseSensitive: Boolean): Integer;` |
| `GetStrings` | method | `function GetStrings(startIdx: Integer;     count: Integer;     crlf: Boolean): string;` |
| `IntAt` | method | `function IntAt(index: Integer): Integer;` |
| `SaveToFile` | method | `function SaveToFile(const charset: string;     bCrlf: Boolean;     const path: string): Boolean;` |
| `Sort` | method | `function Sort(ascending: Boolean;     caseSensitive: Boolean): Boolean;` |
| `SplitAndAppend` | method | `function SplitAndAppend(const inStr: string;     const delimiterChar: string;     exceptDoubleQuoted: Boolean;     exceptEscaped: Boolean): Boolean;` |
| `StringAt` | method | `function StringAt(index: Integer): string;` |
| `StringAtSb` | method | `// sb is a TStringBuilder object. function StringAtSb(index: Integer;     sb: TChilkatBase): Boolean;` |
| `ToSb` | method | `// sb is a TStringBuilder object. function ToSb(sb: TChilkatBase): Boolean;` |
| `WordFollowing` | method | `// sb is a TStringBuilder object. // sbWord is a TStringBuilder object. function WordFollowing(sb: TChilkatBase;     captureEmailAddr: Boolean;     sbWord: TChilkatBase): Integer;` |

## Properties

### StringTable.Count

`Chilkat 11.7.0 · pascal · StringTable · Count · property · read-only · since 9.5.0.62`

```pascal
property Count: Integer read GetCount;
```

The number of strings in the table.

## Methods

### StringTable.Append

`Chilkat 11.7.0 · pascal · StringTable · Append · method · since 9.5.0.62`

```pascal
function  Append(const value: string): Boolean;
```

Appends a string to the table.

Returns True for success, False for failure.

### StringTable.AppendFromFile

`Chilkat 11.7.0 · pascal · StringTable · AppendFromFile · method · since 9.5.0.62`

```pascal
function  AppendFromFile(maxLineLen: Integer;
    const charset: string;
    const path: string): Boolean;
```

Appends strings, one per line, from a file. Each line in the `path` should be no longer than the length specified in `maxLineLen`. The `charset` indicates the character encoding of the contents of the file, such as `utf-8`, `iso-8859-1`, `Shift_JIS`, etc.

Returns True for success, False for failure.

### StringTable.AppendFromSb

`Chilkat 11.7.0 · pascal · StringTable · AppendFromSb · method · since 9.5.0.62`

```pascal
// sb is a TStringBuilder object.

function  AppendFromSb(sb: TChilkatBase): Boolean;
```

Appends strings, one per line, from the contents of a StringBuilder object.

Returns True for success, False for failure.

### StringTable.Clear

`Chilkat 11.7.0 · pascal · StringTable · Clear · method · since 9.5.0.62`

```pascal
procedure Clear;
```

Removes all the strings from the table.

### StringTable.FindMatch

`Chilkat 11.7.0 · pascal · StringTable · FindMatch · method · since 11.1.0`

```pascal
// sb is a TStringBuilder object.

function  FindMatch(sb: TChilkatBase;
    caseSensitive: Boolean): Integer;
```

This string table object holds strings with wildcards. The method returns the index of the wildcarded string that matches the text in `sb`, or -1 if no match is found. `caseSensitive` specifies whether the matching should be case-sensitive.

### StringTable.FindSubstring

`Chilkat 11.7.0 · pascal · StringTable · FindSubstring · method · since 9.5.0.77`

```pascal
function  FindSubstring(startIndex: Integer;
    const substr: string;
    caseSensitive: Boolean): Integer;
```

Return the index of the first string in the table containing `substr`. Begins searching strings starting at `startIndex`. If `caseSensitive` is `True`, then the search is case sensitive. If `caseSensitive` is `False` then the search is case insensitive. Returns -1 if the `substr` is not found.

### StringTable.GetStrings

`Chilkat 11.7.0 · pascal · StringTable · GetStrings · method · since 9.5.0.87`

```pascal
function  GetStrings(startIdx: Integer;
    count: Integer;
    crlf: Boolean): string;
```

Return the number of strings specified by `count`, one per line, starting at `startIdx`. To return the entire table, pass 0 values for both `startIdx` and `count`. Set `crlf` equal to `True` to emit with CRLF line endings, or `False` to emit LF-only line endings. The last string is emitted includes the line ending.

Returns True for success, False for failure.

### StringTable.IntAt

`Chilkat 11.7.0 · pascal · StringTable · IntAt · method · since 9.5.0.63`

```pascal
function  IntAt(index: Integer): Integer;
```

Returns the Nth string in the table, converted to an integer value. The `index` is 0-based. (The first string is at index 0.) Returns -1 if no string is found at the specified index. Returns 0 if the string at the specified index exist, but is not an integer.

### StringTable.SaveToFile

`Chilkat 11.7.0 · pascal · StringTable · SaveToFile · method · since 9.5.0.62`

```pascal
function  SaveToFile(const charset: string;
    bCrlf: Boolean;
    const path: string): Boolean;
```

Saves the string table to a file. The `charset` is the character encoding to use, such as `utf-8`, `iso-8859-1`, `windows-1252`, `Shift_JIS`, `gb2312`, etc. If `bCrlf` is `True`, then CRLF line endings are used, otherwise LF-only line endings are used.

Returns True for success, False for failure.

### StringTable.Sort

`Chilkat 11.7.0 · pascal · StringTable · Sort · method · since 9.5.0.87`

```pascal
function  Sort(ascending: Boolean;
    caseSensitive: Boolean): Boolean;
```

Sorts the strings in the collection in ascending or descending order. To sort in ascending order, set `ascending` to `True`, otherwise set `ascending` equal to `False`.

Returns True for success, False for failure.

### StringTable.SplitAndAppend

`Chilkat 11.7.0 · pascal · StringTable · SplitAndAppend · method · since 9.5.0.62`

```pascal
function  SplitAndAppend(const inStr: string;
    const delimiterChar: string;
    exceptDoubleQuoted: Boolean;
    exceptEscaped: Boolean): Boolean;
```

Splits a string into parts based on a single character `delimiterChar`. If `exceptDoubleQuoted` is `True`, then the delimiter char found between double quotes is not treated as a delimiter. If `exceptEscaped` is `True`, then an escaped (with a backslash) delimiter char is not treated as a delimiter.

Returns True for success, False for failure.

### StringTable.StringAt

`Chilkat 11.7.0 · pascal · StringTable · StringAt · method · since 9.5.0.62`

```pascal
function  StringAt(index: Integer): string;
```

Returns the Nth string in the table. The `index` is 0-based. (The first string is at index 0.)

Returns True for success, False for failure.

### StringTable.StringAtSb

`Chilkat 11.7.0 · pascal · StringTable · StringAtSb · method · since 11.2.0`

```pascal
// sb is a TStringBuilder object.

function  StringAtSb(index: Integer;
    sb: TChilkatBase): Boolean;
```

Appends the Nth string in the table to `sb`. The `index` is 0-based. (The first string is at index 0.)

Returns True for success, False for failure.

### StringTable.ToSb

`Chilkat 11.7.0 · pascal · StringTable · ToSb · method · since 11.3.0`

```pascal
// sb is a TStringBuilder object.

function  ToSb(sb: TChilkatBase): Boolean;
```

Appends the entire string table to `sb` using CRLF line endings.

Returns True for success, False for failure.

### StringTable.WordFollowing

`Chilkat 11.7.0 · pascal · StringTable · WordFollowing · method · since 11.1.0`

```pascal
// sb is a TStringBuilder object.

// sbWord is a TStringBuilder object.

function  WordFollowing(sb: TChilkatBase;
    captureEmailAddr: Boolean;
    sbWord: TChilkatBase): Integer;
```

The method performs a case-insensitive search to return the index of a table entry matching `sb`, or -1 if there is no match. Set `captureEmailAddr` to `True` if the target word is expected to be an email address, otherwise set `captureEmailAddr` to `False`. `sbWord` will receive the word (email address) following the matched text. This method helps replace the outdated Chilkat Bounce class, which was used for identifying and categorizing bounced email types.

## Related classes

[`StringBuilder`](https://www.chilkatsoft.com/ai-docs/v/11.7.0/pascal/classes/StringBuilder.md)

