Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 3. 4. 2018 19:29:41

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

zjistit zda pole obsahuje prvek - VYŘEŠENO

Zdravím. Existuje v Basicu nějaká funkce, která by mi odpověděla true nebo false, když nějaký prvek je nebo není součástí nějakého pole? Např. mám pole(1,2,3,4,5) provedu dotaz na prvek 3 odpověď true, provedu dotaz na prvek 8 odpověď false. Samozřejmě vím jak to udělat cyklem, ale mám pocit, že jsem někde zahlíd i nějakou vestavěnou (a tedy rychlejší) funkci, která to zjistí pouhým dotazem. Teď ji ale nenacházím.

... asi to odvolávám, většinu hodnot nacházím v první části pole, a cyklus je tak bleskurychlý že to není potřeba dále zdokonalovat, nehledě na to že stejně potřebuji kromě informace o samotné existenci znát i polohu prvku v poli, což mi obyčejný cyklus krásně dává obojí najednou. Tak jen kdyby někdo věděl odpověď spíše pro zajímavost.

Editoval ludviktrnka (6. 4. 2018 12:15:38)


LibreOffice 5.4.

Offline

#2 3. 4. 2018 20:37:46

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: zjistit zda pole obsahuje prvek - VYŘEŠENO

Ludvíku o jaké pole jde? Běžně to může být úsek buněk s obsahem řetězců, ale také klasická array která má, nebo nemá separátor přestože obsahuje text.
     Pokud jde o klasické pole tak nic jiného nežli procházení cyklem neexistuje. Pokud jde o buňky tak tam by to šlo textovými funkcemi přestože jde o čísla.


     Funkce které odpovídají jako TRUE/FALSE tedy logicky jsou funkce dotazovací IsNumber, IsEmpty a podobně. Existují jak pro sešit tak pro basic. Ale i ty pro sešit procházejí cyklem - jen mnohem rychleji. Do basicu lze portovat funkce sešitu.


     Provděpodobně hledáte něco jako SWITCH - odpovídá nejlépe Vašemu popisu. Nebo například CHOOSE. Ta ale vrací vybranou hodnotu ze seznamu argumentů. Jde o index který se uvádí na začátku jako proměnná - ale vrátí obsah pole indexu. Nejde tedy o logický výsledek.
     Poměrně lépe Vašemu popisu odpovídá DefBool - DefBool nastaví výchozí datový typ pro proměnné podle rozsahu znaku. Podobně DefVar.


     Pokud ale nepůjde o SWITCH ani o jiné podobné funkce či příkazy popište k čemu to potřebujete. Práce s array jsou samostatnou kapitolou které se dost liší od ostatní logiky a syntaxe programování v Basicu. Mám takový návod na různé postupy práce v array. Jsou tam různé věci od vícerozměrných polí přes řadící algoritmy až po manipulace s velikostí ap.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 5. 4. 2018 09:17:55

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: zjistit zda pole obsahuje prvek - VYŘEŠENO

abych tedy upřesnil mám arg(150) = {10,12,38,1560,0,0,32,56,378,0,0,0,0,0, ... až 150} v proměnné arg jsou všechny relevantní ID na něž chci uplatnit nějakou operaci. Tzn. hledám funkci if (arg() obsahuje toto ID=56? například) then (proveď něco) end if. No a ptám se na tu funkci mezi if a then. Ale jak říkám nyní to mám v cyklu do loop while, který pracuje překvapivě rychle, takže řešení není nijak akutní. (funkce switch ani choose v basicu nenacházím, máte namysli select case?)


LibreOffice 5.4.

Offline

#4 5. 4. 2018 11:08:46

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: zjistit zda pole obsahuje prvek - VYŘEŠENO

Vzor je zde Funkce Switch


     Přidal jsem ukázku rychlého vytvoření pole hodnot pomocí sešitu - jsou tam 2x2 způsoby podle potřeby - buď HUSTĚ, nebo PŘEHLEDNĚ, a nebo také DO JEDNOHO SLOUPCE, nebo do VÍCE SLOUPCŮ. Také jsou tam varianty použití pro logické hodnoty, URL, čísla , jmena ap.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 5. 4. 2018 15:51:21

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: zjistit zda pole obsahuje prvek - VYŘEŠENO

Možností je více.

Určitě máte test zapouzdřený ve vlastní funkci.

Často je cyklus v poli nejrychlejším řešením. Pokud by to nestačilo, je vždy možné pole před zahájením cyklu setřídit (a paralelně držet informaci o původní pozici), kde se dá použít třeba binární hledání.

Trochu složitější a ne nutně rychlejší je volání funkce listu (MATCH) nebo, pokud na pozici nezáleží, lze pole pomocí funkce JOIN převést na řetězec a funkcí InStr testovat výskyt, ...

Dobře napsaný cyklus je dobrá volba.

Offline

#6 6. 4. 2018 12:14:39

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: zjistit zda pole obsahuje prvek - VYŘEŠENO

Děkuji oběma. Od neutra se beru větu "Pokud jde o klasické pole tak nic jiného nežli procházení cyklem neexistuje" a od LP "Dobře napsaný cyklus je dobrá volba." a vychází mi z toho celkem jasný závěr, že prvky je "téměř" v každém případě nutno projít cyklem a zároveň je to to nejlepší co se s tím dá dělat, takže tím téma uzavírám. Díky


LibreOffice 5.4.

Offline

Zápatí