Home


Aktualizováno 22.05.18 11:00:37
**********************
22.05.2017
Příkaz

pip <adresář>\*.*/dd/tr

smazal celý adresářový podstrom pod <adresář>. Prázdný <adresář> zůstal
zachovaný. Pokud chcete vymazat i <adresář>, můžete nyní míto /dd
použít /du.
**********************
Problém podpisu byl pouze pro 2. a další chod. Chyběla inicializace jedné
proměnné.
**********************
18.05.2018
Ne vždy je podpis správný, takže se vracím k předchozí verzi.

Ing. Havel z Vosa Znojmo zjistil jakási závadna hesla v programu
hesla.cmd. Bylo to způsobeno binární podobou hash v relaci. Po
přidání konverze .crypt_encode do tvaru B64 je to již O.K. viz
www.redap.cz/heslo.zip
**********************
17.05.2018
Tak jsem konečně na základě teorie zbytkových tříd pochopil Montgomery
multiplication a podpis jsem přepsal - místo dělení je násobení a shift.
Bohužel jako obvykle jsem místo 42.8 kB originálu zplodil pouze 4 kB.
**********************
13.05.2018
Příkaz

pip =<soubor>.zip/dc

se chybně v dávce ptal na přepsání souborů. Opraveno.
**********************
12.05.2018
Pokud byste chtěli najít nějaký řetězec v docx, pak vězte, že se jedná o zip
soubor (podobně xlsx) a je nutno:

copy <jmeno>.docx tmp.zip
pip =tmp.zip/dc
ret:=conv("Šantl",18)
.bopenr word\document.xml
del=$strlen
.bfind 0,'del',ret
;'$strlen'

to znamená, že text je zde uložen jako utf-8. Viz záhlaví document.xml.
**********************
10.05.2018
pip out.txt=c:\*.<cosi>/ln/tr

se na win7 a výše kousl na adresáři c:\windows\winsxs. Má to cca 33000 adresářů
se jmény kolem 100 znaků. To PIP paměťově nevydržel. Takže jsem tam dal
nestandardní velikost paměti - teď to projde a navíc po

pip out.txt=c:\*.<cosi>/ln/tr/ig

se adresář windows zcela ignoruje.
**********************
Funkce conv se dá využít nyní pro prohledávaní WORD souborů - texty v UTF16
- zde text dokument.

_mode bm.<*jinak se binární nuly v UTF16 převedou na mezery!*>
rad:=conv("dokument",19)
.bopenr <word>.doc
del=$strlen
.bfind 0,'del',rad
.bread '$strlen',vys:16
;'vys'
_mode bm:0.
**********************
08.05.2018
Funkci conv jsem naučil převod do UTF16 - pozor na zdvojnásobení délky!
**********************
18.04.2018
Rýpal jsem se v RSA podpisu kódování, dekódování. Originál pracuje
s "Monghomery multiplikative inverse". Já to zkusil podle prosté
teorie zbytkových tříd. Jednak pro malá čísla např. (37,209) a (73,209)
(soukromý a veřejný klíč) dává originál chybné výsledky. Můj prográmek
počítá správně. Pravdou je, že pro RSA 2048 bitů je trochu pomalejší
na mém stařičkém stroji 0.2 s oproti asi 0.03 s originálu. Velikostí
je ovšem nesrovnatelný s mými několika řádky. Pro EET to nemá valný
význam. Šlo spíše o ukojení mého ega - nerad mám ve WR něco, čemu zcela
nerozumím.
**********************
17.04.2018
Do CSV a ODBC jsem přidal při .codepage 6 změnu 0xa0 na mezeru.

U GRD jsem přidal za "Redapovská podmínka" - "Reset této podmínky"
********************
10.04.2018
Řešil jsem problém jednak chyného zdvojeného zobrazení věty pro režim AK,DE
v případě indexu + nemožnost couvat na aktualizované věty. Tento stav je od
nepaměti. Zřejmě se mně v minulosti nechtělo řešit tento problém a ani po
řešení nebyla poptávka. Nakonec lze problém řešit stávajícími prostředky:

1. Do RDA přidáme jednu číselnou (stačí jednobitová) položku - třeba AKT

2. Místo AK dáme do přepínačů PO:2 reprezentované řádky

.se(AKT- 0)
.co()
.se()

3. Do závěrečného PTB přidáme AKT=1

Konečně, nemá-li být uživatel zmaten přerovnáváním či mizením vět je dobré
použit subindex s prázdným seznamem třídících klíčů.

Pokud před VST položku AKT vynulujeme, může se uživatel vracet pouze na věty
pořízené v následujícím sezení.
********************
31.03.2018
Po úpravě SHA1, SHA256 a SHA512 + kryptografie pro EET jsem se dostal s velikostí
wr587.exe pod velikost wr586.exe, i když toho první EXE umí o něco více.
********************
20.03.2018
Trochu jsem pošolichal cizí program na výpočet hash MD5. Možná, že je o něco
pomalejší, ale EXE je o 10 kB menší. Nicméně autor by ho po úpravě nepoznal.
********************
16.03.2018
V OPT připuštěna modifikace klíčů xm:x a ht:x na xm:x:8 a ht:x:8 vedoucí
k výstupu XML resp. HTM v kódu UTF-8. Doposud to bylo pouze Win 1250.
********************
15.03.2018
Zavedena funkce

n=cdpg("<vstupní soubor>","<výstupní soubor>")

detekující použitou codepage <vstupního souboru> - bude obsahem n a
do <výstupního souboru> převede data do KOI08. Čím delší vstup, tím
je pravděpodobnější, že to dopadne správně.
********************
28.02.2018
Nafukovací bafr jsem musil zařadit i do CSV kvůli početným, ale jednoznakovým
údajům.
********************
27.02.2018
Vzhledem k rozsáhlosti stahovaného PDF (1.5 MB) kolabovalo .https. Proto
jsem do WR587 přidal automatické nafukování příjmového bafru, který má
na počátku pouze 100 kB.
********************
26.02.2018
V CSV připuštěno až 2000 sloupců a uchozen případ oddělovače mezera.
*********************
25.02.2018
Nevím jak se vám to bude líbit, ale zanesl jsem do WR další část notace z C-čka.
Konkrétně:

n=1
a=-1; b=-1;
.if(n==1) {a=0; b=1; "ano";} .else {a=0; b=2; "ne";}
;'a' 'b'
.if(n==0) {a=1;
b=1;
"ano";}
.else
{a=2;
b=2;
"ne";}
;'a' 'b'
.if(n==0) {a=0;
b=0;
"ano";}
;'a' 'b'
.if(n==1)
{a=3; b=3; "ano";}
;'a' 'b'
.if(n==0)
{a=3; b=3; "ano";} .else {a=4; b=4; "ne";}
;'a' 'b'

Tudíž nerozlišuji .if(...)CRLF a .if(...) příkazy. Mizí tedy .begin a .end a
ano a ne příkazy jsou uzavřeny v hranatých závorkách. Může být přirozeně
jen ano. Geometrické rozložení příkazů na řádcích je zcela libovolné.
*********************
23.02.2018
Do .readhttps doplněna práce se staženými PDF soubory. Dosud jsem se k nim choval
jako k HTML a poničil jsem jejich obsah.
*********************
22.02.2018
Vzhledem k tomu, ze téměř všude chodí z minulosti pokračovací řádek pomocí \\,
dotáhl jsem to všude v ATP. Takže

.if(n==1)\\
a=1; b=1; "ano";\\
.else\\
a=2; b=3; "ne";
.if(n==1) "ahoj všichni rodní rodáci,\\
nazdar ostatní"; .else "nezdravím"

se interně převede na

.if(n==1) a=1; b=1; "ano"; .else a=2; b=3; "ne";
.if(n==1) "ahoj všichni rodní rodáci, nazdar ostatní"; .else "nezdravím"

U typu HM jsem použil příznak, který již existoval a nefungovalo pak správně sčítání.
Opraveno ve spolupráci s ing. Eidelpesem. Zdá se, že tento typ zatím nikdo
pořádně nepoužil.
*********************
21.02.2018
Tu licenci s obráceným lomítkem jsem zatím stáhl. Např.

cd \

šlo do kytek.
*********************
20.02.2018
Dnes jsem řešil nahodilé padání .direct_mail v RT. Ukázalo se, že v dokumentaci
je možnost ",SSL", ale mělo by být správně "SSL" v uvozovkách!
********************
19.02.2018
Uchozena licence, že když na konci řádku ATP je obrácené lomítko, tak
se k němu přilepí následující řádek. Např.

.if(n==1) "ahoj všichni rodní rodáci,\
nazdar ostatní"; .else "nezdravím"

nebo

.if(n==1)\
a=1; b=1; "ano"; .else a=2; b=3; "ne";

nebo

.if(n==1)\
a=1; b=1; "ano";\
.else\
a=2; b=3; "ne";

Řádek ATP ale nesmí překročit 30000 znaků.
********************
18.02.2018
Z důvodů symetrie doplněna funkce dc(x,y) zajišťující celočíselné
dělení bez nároku na hodnotu zbytku.
********************
17.02.2018
V TRZBA.ZIP na webu je zmodifikovaný program TRZBA.CMD pro WR587.
********************
16.02.2018
Ještě v Heslo.cmd lze psát:

.crypt_hash hes,"SHA512",heshsh
.if(text[1:2]=="Zo" || leer)
.begin
hes:=r.hes
.if(hes!=heshsh) "Špatně"; .exit
.else
r.hes:=heshsh

místo

.crypt_hash "<>hes.txt","SHA512","<>hes.hsh"
del <>hes.txt
.if(text[1:2]=="Zo" || leer)
.begin
_savebig r.hes,"<>hes2.hsh"
.bopenr #1,"<>hes.hsh"
.bopenr #2,"<>hes2.hsh"
.bcomp #1,#2,0,0,64
.if($eof) "Špatně"; .exit
.bclose #1,#2
del <>*.*
.else
_loadbig r.hes,"<>hes.hsh"
********************
16.02.2018
Ještě jsem v .cryp_encode v případě výstupu do proměnné vypnul odřádkovaní
po 48 vstupních znacích.
********************
16.02.2018
V příkazech .crypt_hash, .bintohex, .hextobin, .crypt_decode a .crypt_encode
se jede ze souboru do souboru. Jména souborů musí být v uvozovkách. Toho jsem
využil pro možnost místo souborů zadávat eventuálně ATP proměnnou. Např.

heslo:="Nazdar"
.bopenw heslo.dat
.bwrite -1,"Nazdar"
.bclose
.crypt_hash "heslo.dat","sha512","hsh.bin"
type hsh.bin
.crypt_hash heslo,sha512,hsh
;'hsh'
.bintohex "hsh.bin","hsh.hex"
typ hsh.hex
.bintohex hsh,hex
;'hex'
.hextobin hex,hsh
;'hsh'

V testovacím příkládku jsou vidět obě varianty a dávají stejný výsledek. Přirozeně
může být i na vstupu soubor a na výstupu proměnná nebo obráceně.

V prográmku trzba.cmd je nyní

.crypt_decode pkp,pkpbin
.crypt_hash pkpbin,SHA1,pkphsh
.bintohex pkphsh,bkp0
bkp:=bkp0[1:8]+"-"+bkp0[9:16]+"-"+bkp0[17:24]+"-"+bkp0[25:32]+"-"+bkp0[33:40]

místo

.open pkp.b64
.data 'pkp'
.close
.crypt_decode "pkp.b64","pkp.bin"
del pkp.b64
.crypt_hash "pkp.bin","SHA1","pkp.hsh"
del pkp.bin
.bintohex "pkp.hsh","bkp.hex"
del pkp.hsh
.openr bkp.hex
.read bkp0
.close
bkp:=bkp0[1:8]+"-"+bkp0[9:16]+"-"+bkp0[17:24]+"-"+bkp0[25:32]+"-"+bkp0[33:40]

********************
15.02.2018
Minulý týden jsem řešil problém nekompatibility výstupu z TBN na tiskárnu
a do PDF při vyplňování formuláře (obrázek). Problém byl v tom, že obrázek
měl formát přesně A4. Tisk ve WR začíná na nulové lince (spodek písmen)
vzdálené od horního okraje o výšku fontu nad nulovou linkou. WR nevadí,
že se obrázek dole ořízne (bílý okraj obrázku nenese informaci), ale
Adobe to nepřipustí a obrázek poněkud zmenší, aby se neořezával.
A nekompatibilita je na světě. Pomohlo xy! 0# 0#; před obrázkem, který se pak
kreslí opravdu jak pro tiskárnu tak pro PDF od nulové souřadnice.
********************
15.02.2018
Pro usnandnění práce se šifrovanými RDA a indexy je nyní možno zadat

.secret "<cesta1><jmeno1>","<cesta2><jmeno2>",...

analogie syntaxe _openc včetně udržovaných indexů (x__).

Po .password% <číslo> se automaticky všechny indexy a RDA uvedené v seznamu
za .secret šifrují a na nic jiného se šifrování nevztahuje.
********************
08.02.2018
Ukázalo se, že při latentním heslu (.password- ) se nepracovalo správně
se zašifrovaným indexem.
**********************
05.02.2018
Pro usnadnění programování se šifrovanými soubory je zaveden příkaz

.password% <max 9 cifer číslo>

číslo se bere hjako heslo a zároveň se interně provede .password-, tj. heslo
je latentní. Pokud byste chtěli zašifrovat nějaké RDA, pak musíte

.password+
%zuz
<soubor>
<soubor>
;
//
%
.password-

<soubor> je zašifrován a vše ostatní jede v otevřeném módu. Pokud byste ale
někde udělali:

%zuz
<soubor>
<soubor>
;
//
%

pak <soubor> již nebude zašifrován.
*********************
05.02.2018
Pokračoval jsem v uchození jednak v ATP

r.ret|="abc"

a v instrukci

ret|="abc"

bohužel nejde

ret+="abc"

je to jednak do této doby funkční příkaz - ret se převede na číslo a přidá se
k němu číselná hodnota "abc". Smysl nedává ani ret+:="abc", protože za řetězec
se přidá "abc" a pak se ořízne na délku ret - "abc" zmizí.
*********************
05.02.2018
Ve snaze znemožnit smysluplné prohlížení paměti PC bylo provedeno šifrování
informace při kešování souborů - původně byl částečný obsah souboru po delší dobu
dostupný v paměti.
*********************
03.02.2018
Dále po všech uvolnění alokované paměti je paměť vynulována.
*********************
03.02.2018
Pro jistotu jsou nyní soubory na RAM disku zašifrované, takže odezíraním
paměti není nic rozumného vidět. Pouze na krátké okamžiky se někde v paměti
nějakým způsobem objevuje něco čitelnějšího. Tak je to ale i v jiných
konkurenčních úlohách. Takže např. v kombinaci se zmíněným šifrováním Windows
vybraných složek, lze lokální citlivé informace ochránit. Doporučuje se
zejména na přenosných a tím i snadno zcizitelných počítačích.
*********************
01.02.2018
Jednak znovu zdůrazňuji, že název RAM disk nemá nic společného s původním
RAM diskem. Soubory jsou nějakým způsobem uloženy v paměti v mé správě a
kromě běžící úlohy na ně nikdo nevidí, ostatní ani netuší, kde se v paměti
nacházejí. Struktura nemá nic společného s file systémem Windows! Dnes jsem
pro jistotu přidal mazání alokované paměti souborem při vymazání souboru
nebo pamětí všech souborů po ukončení úlohy, aby nebylo možno z fragmentů
paměti získat původní informaci.
*********************
01.02.2018
Z důvodu výzkumu šifrování složek ve Windows jsem se rozhodl pořídit další účet
na mém PC. Po zadání jména mně bylo sděleno, že alespoň jeden účet musí mít
práva administrátora. Takový účet jsem ale měl, takže jsem to nicméně odklepl
a přišel jsem o původní přístup, nastaveni plochy, přístup k poště atd. Když
už se stalo, vytvořil jsem další účet s omezenými právy a zkusil nastavit
šifrované složky v jednom i druhém účtu. To jde a co je zašifrováno není možno
prohlížet z druhého přihlášení (oboje přes heslo). Takže můžete uživatelům
vytvořit soukromou složku, do které budou vidět pouze oni. Pokud jsem zaškrtl
použít i pro podsložky, došlo k okamžitému šifrování všech souborů, v opačném
případě se šifrovaly pouze nově kopírované soubory do této složky.
*********************
31.01.2018
Uchodil jsem zatim v pouze v ATP možnost zkrácení zápisu:

s:=s+t na s+=t

a

s:=s|t na s|=t

přirozeně obě proměnné musí být řetězcové a tudíž existovat.
*********************
30.01.2018
?? Dalo by se z hash hesla odvodit nějaký klíč a tím šifrovat všechny soubory.
Při otevření by se soubor dešifroval na RAM disk a při uzavření zašifroval
na původní místo. Způsob šifrování by byl znám pouze mně. Nevýhodou by bylo,
že při pádu Windows by byly aktualizace ztraceny. Výhodou by bylo, že veškeré
lokální soubory by byly na disku nečitelné. Pro společná data na serveru by
ovšem musil být společný klíč a to by byl problém s utajením. Takže výše
navržený způsob utajení by se hodil pouze pro lokální data.
*********************
29.01.2018
Představa ukládání hesel v nějakém centrálním RDA pro různě přihlášené uživatele
je na www.redap.cz/heslo.zip. RAM disk je vhodný, protože na něj nikdo jiný
nevidí.
*********************
29.01.2018
Jestě k tomu, že pokud si ukládáte hesla uživatelů, tak obecně se to dělá tak,
že se z hesla udělá hash (máme MD5, SH1, SHA256 a SHA512) a ten se uloží. Pak po
zadání hesla se vypočte hash a porovná se s uloženým hash. Tedy heslo nikde
nefiguruje.
*********************
29.01.2018
Uvědomil jsem si, že Windows nabízejí šifrování složek. Buď jsem to nepochopil
nebo je to tak, že šifrované složky určuje Administátor a ten do toho může
kopírovat soubory (přitom se zašifrují). Když jsem se přihlásil jako uživatel,
tak pro nakopírování souboru do šifrované složky jsem musil zadat heslo
administrátora a soubor byl pak pro mne nečitelný. Nevím, zda to nesouviselo s tím,
že uživatelský účet byl bez hesla.
*********************
29.01.2018
Vzhledem ke GDPR nevím, zda by se nehodilo nějaké modernější šifrování dat.
A pokud ano, tak konkrétně kde.
*********************
29.01.2018
Kdysi pro čtení z DBF se udělal převod textu ve tvaru DT do našeho DT.
Problém byl ale v tom, že se předpokládalo formátované DT - tečky, mezera
a za mezerou číslo vše na pevných pozicích. V rámci CSV je DT ve volném
formátu. CSV sloupec s DT považuje za text. V následujícím ZUZ nebo
v aritmetice nad výstupní větou lze nyní psát <dt>=dadt(<csv dt>) a dojde
k převodu novou funkcí textu <csv dt> do položky typu <dt>.
********************
23.01.2018
Dokončena úprava instrukce CSV ve spolupráci s RNDr. Květoněm z ČHMÚ, který
zpracovává velké objemy CSV souborů (meterologická data).

Nový popis:

Instrukce CSV čte tzv. CSV struktury z Excelu ap.

P a r a m e t r y CSV

CSV funguje a má parametry častečně jako ZUZ, s tím, že na vstupu má soubor CSV.
Vstupní soubor je několika
průchody analyzován. Hledají se čísla a datumy ve sloupcích. Potom se
stanoví nejčetnější počet sloupců v řádcích CSV (může v tom být také uložena
normální sestava!) a řádky s jiným počtem se vynechají, pokud není přepínači
určeno jinak. Stadardním oddělovačem je středník. Lze ho přepínačem OD změnit.

Přepínače:

"ai" zapnout automatickou generaci názvů sloupců ve tvaru Sxxx,
xxx je číslo 001, 002, ...

"di:x" možnost lokálně zadat délku identifikátorů (standard 12 znaků)

"ch" si můžete nechat vypsat řádky, které se vynechávají do souboru se
jménem shodným s CSV, ale příponou .CHB. V prvním chodu se do protokolu
zapisují řádky s odchylným počtem sloupců od průměrného počtu a ve druhém
řádky které mají správný počet sloupců, ale některá sloupcová hodnota
neodpovídá průměrnému charakteru sloupce DD nebo ND. Má tedy charakter RE.

"mx:1" - vypne algoritmus vynechání menšího počtu řádků s jiným počtem sloupců.

"mx:2" - nehomogenní sloupce se deklarují jako RE/RV, jinak se řádky s odlišnými
hodnotami vynechají a eventuálně se zapíší do chybového protokolu.

od:ddd" - oddělovač údajů. Implicitně středník.

"ov" - operace nad vstupem - jako ZUZ

"oz" - operace nad výstupem (standard) jako ZUZ

"pr:n" přeskočit prvních n-1 řádků (n=1 se ignoruje!), s tím,
že hlavička je na n-tém řádku.

"ps" - prázdné sloupce se ponechají jako prázdné textové údaje, jinak
se vypustí.

"q5:xy" nyní i 81 a 91

"re" - všechny údaje se považují za textové a deklarují se
RV(do 255 znaků)/RE.

"re:2" - všechny údaje se považují za textové
a deklarují se RE.

Sloupce s datumy a čísly se deklarují v pomocné RDF jako DD a ND, ostatní jako
RV/RE. U čísel nevadí desetinná čárka, účetní formát i s měkkými mezerami.
U datumů nevadí různé oddělovače. Akceptuje se DDxMMxRRRR a MMxxDDxRRRR
a RRRRxMMxDD. Akceptuje se i datum ve volném formátu 1.1.2011|31.1.2011|1.11.2011
tj. případy s 8 a 9 znaky místo 10.

Identifikátory se berou z úvodního řádku (obecně nemusí být první) a to
v maximální délce dle _mode di:x. (implicitně 12). Kódová stránka se
určuje přepínačem "q5:xy". Pokud je struktura divočejší, lze pomocí přepínače
pr:n přeskočit několik úvodních řádků.
Pokud jsou texty identifikátorů nesmyslné nebo úplně chybí, lze pomocí
přepínače ai zapnout automatické pojmenování sloupců.

V případě AI+PR:n se předpokládá, že na n-tém řádku je přímo hlavička,
která je ale ignorována.

Např.

/n
_mode di:20.
%csv
q5:61,ai,pr:6.
c:\tmp\apsoft\money2~1.csv
(=) pokus
;
//
%
inf pokus
/a

a soubor začíná

/n
Obratová předvaha;;;;;;;;
;;;;;;účetní rok:;2010;


;;Počáteční stav;;Obraty za období;;Zůstatek;;
Účet;Středisko;MD;D;MD;D;MD;D;
013000;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
01300x;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
0130xx;;11 558,00;0,00;0,00;0,00;11 558,00;0,00;
...
/a

Vytvoří POKUS.RDA se strukturou:

/n
pokus.rda
S001 rv 6 58
S002 dd 6 2
S003 dd 2 2
S004 dd 2 2
S005 dd 2 2
S006 dd 6 2
S007 dd 2 2
$
/a

mx:2 pomůže např. řešit neobvyklý případ kdy sloupec telefon je numerický,
ale v jednom případě je "000000000,111111111" a k tomu "+420000000000"
což by se bez přepínače RE pojalo jako číslo s 12 místy před a 9 za desetinnou
tečkou a vylezlo to z rozsahu. V tomto případě se nyní řádek se dvěma čísly
bez přepínače RE vynechá z důvodů odchylky od normálu.

Textové údaje se deklarují jako RV pro délku <256 znaků jinak jako RE.
Pokud by to vadilo, lze použít přepínač re:2 vše je pak RE.
********************
11.01.2018
Zkoumáním příkazu .setprns konstatuji, že příručka neodpovídá skutečnosti.
Správně v A.2.15:

.setprns "<>|<jméno prn>",<0|landscape>[,<číslo formátu papíru>]

v přírucče chybí možnost volby papíru. V A.4.4.10 je ale popis správný.
********************
11.01.2018
Ve Win10 poslední vydání přestal chodit .sendmail i posílání z Acrobata. Řešení je

1. V adresáři C:\Program Files\Common Files\System\Msmapi\1029 (byl
tam místo adresáře 1033) jsem přejmenoval soubor MSMapi32.dll na
MSMapi32.old

2. Restart PC

účinné dle ing. M. Nováka z MINOV.
********************
10.01.2018
Trochu si hraji s instrukcí CSV. Z pohledu uživatele je to v dosavadním provedení
černá skříňka. Proto jsem do ní vložil jednak výpisy intervalů řádků se stejným
počtem sloupců a pak řádků+číslo sloupce, jehož hodnota v rámci numerického nebo
datového sloupce je jiného typu. Při přepínači CH, se vytvoří soubor se shodným
jménem s CSV, ale s připonou .chb, obsahující řádky, které se vynechaly.

Pokud dáte přepínač MX:2, pak se všechny nehomogenní sloupce deklarují jako RE/RV.
********************
08.01.2018
Protože se mně dostal do ruky soubor XML, kde hodnoty byly obkrouženy apostrofy
místo uvozovkami a prohlížeč XML byl spokojen, připustil jsem v instrukci XML
i alternativu s apostrofy.
********************
01.01.2018
Nevím, zda ještě má smysl pokračovat ve vývoji WR.