# text_scanner

### Funkce

Slouží pro práci se strukturovanými textovými soubory. Soubor je členěn do sekcí, které obsahují na každém řádku na levé straně rovnítka klíč a na pravé straně hodnotu. Typickým příkladem takovýchto souborů jsou INI soubory používané systémem Control Web nebo některými aplikacemi ve Windows.

### Syntax

      text_scanner text_scanner_name;
        rem = string;
        timer = timer_name;
        send_same_data;
        driver_exception = driver_name;
        file_name = string;
        open = boolean_expression;
        save = boolean_expression;
        clear = boolean_expression;
        output = boolean_dataelement;
        receivers = [ identifier, . . . ];
        section
          name = string;
          range = min_index, max_index;
          item
            key = string;
            element = data_element;
          end_item;
          item
            ...
          end_item;
        end_section;
        section
          ...
        end_section;
      end_text_scanner;

### Specifické parametry přístroje

- file_name
  Jméno souboru, který je určen ke zpracování.
- open
  Logický výraz. Pokud je výsledek true, budou načtena data z definovaného souboru.
- save
  Logický výraz. Pokud je výsledek true, budou data zapsána do definovaného souboru.
- clear
  Logický výraz. Pokud je výsledek true, bude obsah souboru smazán.
- output
  Datový element, který bude nastaven na hodnotu true po úspěšné operaci se souborem.
- receivers
  Seznam příjemců zpráv, reagujících na nastavení datového elementu definovaného u parametru output.
- section a end_section
  Klíčová slova uzavírající vždy všechny parametry týkající se jedné sekce.
  - name
    Název sekce. V souboru je v hranatých závorkách (např. [sekce])
  - range
    Počet indexovaných sekcí pro pole (indexy odpovídají indexům pole).
  - item a end_item
    Klíčová slova uzavírající vždy všechny parametry týkající se jedné položky.
    - key
      Identifikační klíč datového elementu v sekci.
    - element
      Datový element (proměnná, kanál, pole), který má být zapisován (resp. načítán) do (ze) souboru.

### Příklad

Příklad nastavení parametrů přístroje

      text_scanner TextScanner;
        file_name = 'TEST.INI';
        section
          name = 'main';
          item
            key = 'user name';
            element = user_name;
          end_item;
          item
            key = 'time';
            element = time;
          end_item;
          item
            key = 'date';
            element = date;
          end_item;
        end_section;
        section
          name = 'parameters';
          range = 1, 5;
          item
            key = 'temperature';
            element = TempArray;
          end_item;
          item
            key = 'maximal';
            element = MaxArray;
          end_item;
          item
            key = 'minimal';
            element = MinArray;
          end_item;
        end_section;
      end_text_scanner;

Obsah souboru TEST.INI

      [main]
      user name = kacafirek
      time = 12:35
      date = 27.10.1997

      [parameters 1]
      temperature = 24.5
      maximal = 40
      minimal = 10

      [parameters 2]
      temperature = 27
      maximal = 35
      minimal = 15

      [parameters 3]
      temperature = -12
      maximal = -5
      minimal = -20

      [parameters 4]
      temperature = -25
      maximal = -10
      minimal = -30

      [parameters 5]
      temperature = 40
      maximal = 60
      minimal = 20

### Nativní procedury přístroje

    Open( Path : string; &ok : boolean )

Otevře soubor Path, načte data a výsledek operace vrátí v parametru ok.

    Save( Path : string; &ok : boolean )

Zapíše data do souboru Path a výsledek operace vrátí v parametru ok.

    Clear()

Smaže obsah souboru.

    CreateSection( Section : string )

Vytvoří novou sekci Section.

    SetSection( Section : string; &ok : boolean )

Nastaví ukazatel sekce na sekci Section. Výsledek operace vrátí v parametru ok.

    ClearSection( Section : string )

Smaže obsah sekce Section.

    DeleteSection( Section : string )

Odstraní sekci Section.

    GetKeyBool( Key : string; &Value : boolean; &ok : boolean )

Vrátí v parametru Value hodnotu typu boolean klíče Key z právě aktuální sekce. Výsledek operace vrátí v parametru ok.

    GetKeyInt( Key : string; &Value : number; &ok : boolean )

Vrátí v parametru Value hodnotu typu integer klíče Key z právě aktuální sekce. Výsledek operace vrátí v parametru ok.

    GetKeyReal( Key : string; &Value : real; &ok : boolean )

Vrátí v parametru Value hodnotu typu real klíče Key z právě aktuální sekce. Výsledek operace vrátí v parametru ok.

    GetKeyStr( Key : string; &String : string; &ok : boolean )

Vrátí v parametru String hodnotu typu string klíče Key z právě aktuální sekce. Výsledek operace vrátí v parametru ok.

    SetKeyBool( Key : string; Value : boolean; &ok : boolean )

Nastaví hodnotu klíče Key na boolean hodnotu Value v právě aktuální sekci. Výsledek operace vrátí v parametru ok.

    SetKeyInt( Key : string; Value : number; &ok : boolean )

Nastaví hodnotu klíče Key na integer hodnotu Value v právě aktuální sekci. Výsledek operace vrátí v parametru ok.

    SetKeyReal( Key : string; Value : real; &ok : boolean )

Nastaví hodnotu klíče Key na real hodnotu Value v právě aktuální sekci. Výsledek operace vrátí v parametru ok.

    SetKeyStr( Key : string; String : string; &ok : boolean )

Nastaví hodnotu klíče Key na string hodnotu String v právě aktuální sekci. Výsledek operace vrátí v parametru ok.

    ShowFile()

Zobrazí aktuální stav souboru v textovém DataView.

## Událostní procedury přístroje

Přístroj může volat standardní událostní proceduru:

    OnActivate()

Podrobnější informace k této proceduře lze nalézt v kapitole Programování a procedury.