Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 193.84.198.–

peter
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386991

RomanZ: To je lepsi.
Mne zas pri tom tvem napadlo, ze tu tabulku nemusis ukladat, muzes ji vytvarel pro zadany interval casu pomoci selectu. K tomu najoinovat tu puvodni a pomoci where odfiltrovat vyplnene radky. Neco jako, ale, zas nevim, jak to zapsat... :)

SELECT B.a, B.b, B.cas, casFrom+count(*) AS casX FROM tab A
 LEFT JOiN tab B on B.cas = A.casFrom+count(*)
WHERE B.cas IS NULL


Jakoze bys vyuzil puvodni tabulku jako zdroj radku a omezil to jen podminkami, ze chces data za poslednich 7 dni nebo mensi cislo, kde celkovy pocet radku urcite preahne pocet pro 24 hodin. Ale, z puvvodni tabulky by nevytahl nic a pridal tam jen sloupce z druhe. Ale to je mozna rychlejsi vytahnout tabulku 2x.
 

A jinak souhlasim, ze kdyby server vypadl, tak i tohle i me predchozi reseni nemusi vrati ani radek :) Takze by byla asi lepsi procedura.

peter
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386985

Jo, mozna by to chtelo nejdrive z orderovat a pak ocislovat radky. Nejsem si ted jisty, ktere z toho se provede drive. Jde o to, aby oba ty vybery byli stejne, ve stejnem poradi, jen druhy musi mit cislovani radku +1, aby se spojili spravne radky.
SELECT *, count(*) AS x FROM (SELECT ... ORDER BY ...)

peter
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386984

Se mi tu nedari vlozit prispevek, od vcera. Porad to pise zpracovava, zpracovava a pak to napise, ze vyprsela captcha :) Zkusim kopii z mailu. Zajimave, ze test prosel. Asi se to sekne na nejakem znaku. A to sem to mel puvodne pekne v code.

>- vybrat vse a seradit podle casu
>- udelat rozdil casu s nasledujicim radkem nebo predchozim radkem
>
>Resil bych to asi tak, ze vyberu tabulku 2x. Ocisluji radky pro prvni vyber 1,2,3 a pro druhy jako 2, 3, 4. A pak to cele zgrupovat podle toho cisla a udelat rozdil casu a kde having/where je ruzny od 1. Jen pro mssql neznam ty prikazy, ale asi nejak takto:
>
>SELECT *, SUM(cas) FROM
>(
>SELECT *, +cas AS cas, COUNT(*) as x FROM tab ORDER BY cas DESC
>UNION
>SELECT *, -cas AS cas, COUNT(*)+1 as x FROM tab ORDER BY cas DESC
>)
>GROUP BY x
>HAVING SUM(cas)>1
>
>Radky tam budou 2x.
>Kazdy prvni bude mit x = n, duplicitni bude mit x = n+1.
>Takze zgrupovanim podle x ziskas propojeni obou radku.
>A pro SUM potrebujes jen, aby jeden mel cas kladny a druhy zaporny. Predpokladam, ze UM pak casy odecte.

peter
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386983

test

peter
Python › List sort
23. 11. 2020   #386982

Ja nechci nic rikal, ale cely ukol je vic a vic zahadnejsi.

[0,2,2,2,0] -> [0,4,0,2,0]
[2,2,4,2,2,0,8,8] -> [4,0,4,4,0,0,16,0]

- asi se jedna skutecne o seznam, a asnad i seznam cisel
- kde je X? a ukazky moznosti pro ne?
- v ukazce jsou moznosti, ze 3 po sobe stejna cisla 2,2,2 se zapisi jako 4,0,2, soucet prvnich dvou, ALE v prvnim zadani je napsane, ze vsechna stejna cisla, takze by mel byt vysledek 6,0,0, ze?

Podle mne, cele zadani je spatne, protoze nedava smysl. Pravdepodobne se jedna o skolni ukol, ktery je formulovany velmi nestastne. Pokud se pletu a jedna se o prakticky ukol, tak bych potreboval znat pozadi, proc se dane veci delaji, jaky to ma ucel, k cemu je vysledek dobry? Podle odpovedi bych snad dokazal poskladat chybejici informace nebo urcit lepsi reseni, jak dosahnout vysledku. Precti si treba zadani od hlucheucho. Z nej je jasne, co potrebuje. Odpoved znam, jen mi nejde vlozit prispevek.

peter
Python › List sort
21. 11. 2020   #386965

To zadani dava zadny smysl. Doporucil bych ho predlozit cestinari a nekomu, kdo rozumi programovani, aby text prepracoval.

"udělat bez použití žádné funkce"
- funkce je v podstate cokoliv, i cyklus
- bez pouziti zadne funkce je dvoji negace, takze vysledkem je text 'udelat s pouzitim funkce'

"mi v změní seznam čísel" list[1,2,3,4...] ok, prvni srozumitelna veta. Pokud ale seznam neni zadany jako list cisle integer, tak je nutne popsat, jak vypada zadani nebo pridat obrazek.

"všechna stejná čísla, která jsou stejná"
- kdyz jsou cisla stejna, nemuzou byt vice stejnejsi

"čísla, která ... mezi sebou mají znak "X"
- cislo je cislo, integer, float, nemuze mit mezi sebou "X"

"sečte a na jejich pozice dá právě "X""
- Co??? jako, na pozici v tom poli list nebo jak?
Jsi si jisty, ze se jedna o seznam, list a neni ve vychozim zadani retezec, string? Protoze pozice v retezci dava o neco vetsi smysl. U pole se slovo pozice pouziva mene.
A i kdyby slo o string, ma byt vysledek jaky:
"123X456 789 789" => XXX X X nebo X X X nebo co jineho?
A jeste je otazka, zda maji byt nahrazeny 2 po sobe jdouci stejne, nebo jakekoliv cislo, ktere se vyskytuje vice nez 1x nebo string, ktery ma uprostred X?

No, takze, jestli je to string, tak nejelegantnejsi cestou jsou regularni vyrazy. Jinak by stacilo pouzit i cyklus a split. Ale, jak rikam, reseni je tezke urcit, protoze zadani je zmatene. Ani po 30 letech programovani nejsem z toho schopen vydedukovat vic nez jsem prave popsal.

peter
Python › Python-clovece
19. 11. 2020   #386940

Tak, tak, mi ti muzeme rici, kde mas chybu v kodu. Ale, jinak, mame vlastni praci, zaplacenou. Takze, pokud nemas dostatecnou hotovost...
Ve tvem kodu zadnou chybu nevidim. Funguje spravne. Ale, mozna, ze jsem neco prehledl a nebo jsi nejakou cast kodu zapomnel zverejnit.

peter
Python › Python-clovece
16. 11. 2020   #386928

Jaka je otazka, problem?
Pokud jsi nekdy hral clovece, tak vis, jak hra funguje. Ten popis je sice zdlouhavy, ale celou situaci ti zjednodusuje na nasazeni a pohyb jedne figurky dokud nebude v domecku. A protoze je to simulace, ta by mezi jednotlivym pohybem mel byt casovy odstup.

Kdybych to resil ja, tak si udelam pro kazdeho hrace objekt hrac (nebo pole s informacemi o hraci), s x,y,delka,barva. Pri hodu kostky zvysil delku. Pomoci funkce prepocital polohu x,y pro herni plochu a overil vyhozeni druheho hrace. A vykreslil ho na herni plochu. Kdyz budes sledovat delku jeho cesty, tak se snadneji kontroluje, zda uz je v domecku nebo ne.
Nevim, jak je to mysleno s temi poli. To si najdi v ucebnici, co je v pythonu nazyvano jako pole. V javascriptu, ktery pouzivam, je pole cislovane a asociativni, [0, 0, 0, 0] {'x':0, 'y':0, 'delka':0, 'barva':0} (zapis objektu hrac v obou verzich).
Sachovnici bych mel jako objekt/obrazek v pozadi do ktereho bych uz nesahal. Umistoval bych jen figurky. Ucitel to mozna myslel tak, ze si vytvoris pole sachovnice. Do nej zapises pozice hracu. A pak cele pole vykresli se zmenenymi pozicemi..

Udelej si to, jak chces. Kdyz to brzo odevzdas, ucitel bude mit cas ti to vratit k prepracovani, ze to chtel jinak, treba.
Pokud zadani nerozumis, komunikuj se zadavatelem ulohy. Samozrejme, nic proti tomu, poradit se s kolegy nebo dalsimi osobami. Ale v praxi zadani ulohy nejvice rozumi zadavatel a vi, jak to chce. V pripade ucitele musis polozit spravne otazky. Ucitel po vas chce, aby jsme si na reseni prisli sami, takze se pokusil zadani formulovat, co nejvic obecne a nerika vam, jakym zpusobem mate presne danou cast resit. Pouze rika, z pohledu uzivatele, co ocekava, ze uvidi na obrazovce. Presne takhle ti to rekne zakaznik. Ucitel ti samozrejme muze rici, jak se co da naprogramovat. Ale to bys za nim chodil pokazde od zakaznika z prace se ho vyptavat. na neco proste musis prijit sam :)

peter
Regulární výrazy › Úprava krátkého regulárního…
15. 11. 2020   #386926

   

1-3 se zapisuje jako {1,3}
min 1, max 3

(A).*?(B)
A = ^(.*?(;|$)){1,10})
B = ((.*?(;|$)){1,10}$
peter
Regulární výrazy › Libovolný počet znaků nebo nic
6. 11. 2020   #386876

#7 peter
Uvedu priklad. na obe ty moznosti ti .*kw.* vybere kw=programujte.com :)

/programujte.com/
/zalohujte_a_programujte.com/

peter
Regulární výrazy › Libovolný počet znaků nebo nic
6. 11. 2020   #386875

No, a to prave, co ty povazujes za proste RE ma proste vic zapisu :) Zalezi prave na aplikaci, pro kterou ten RE sestavujes. Uz jen samotne RE ma deleni na Perl-Compatible a POSIX Extended. Jen jsem te chtel upozornit, ze ten gna zapis nemusi delat vzzdy to same a nemusi ti vyhovovat, protoze nedela jen to, co chces, ale neco trochu jineho, navic. A krom toho muze pokryt i moznosti, ktere hledas. Pokud ti vyhovuje, tak je to ok :)

peter
Regulární výrazy › Úprava krátkého regulárního…
6. 11. 2020   #386874

Struktura CSV znamena plny CSV. Mimochodem, lepsi format pouzivaji sql, ktere proste klicovy znak zdvovuji. Spatne je to prave proto, ze csv ma jinou syntaxy. Ale ok, kdyz je tomu jinak.

Jak jsem psal, mohlo by to byt nejak takto. Tam je to uz pak jen o zavorkach 

(^(.*?(;|$)){10})|((.*?;|$){10}$)

(.*?(;|$)){10}
.* vyber jakykoliv text
;|$ strednik nebo konec puvodniho stringu
? v tomto pripade znamena hledej, dokud nenarazis na vyraz v zavorce
a cely tenhle vyraz ozavorkujes a chces jej 10x
( .* ? ( ;|$ ) ) {10}

Jenze, takhle napsane, kdyz bude pocet mensi nez 10, tak ti vrati mensi
 pocet. Jinak napsane, bez $, ti vrati nic pri mensim poctu. Otazkou je, jak
moc se muzes spolehnout na to, ze tam bude minimalne 10 shod.

No, a kdyz chces od zacatku a konce, tak to je jen o pridani ^ a $ a dalsich
 zavorek (ty mezery tam davam navic, zamerne, aby bylo videt rozdil, ale ty si je odmaz)
(^ (.*?(;|$)){10} )
( (.*?(;|$)){10} $)
A mezi oba vyrazy pak musis dat "nebo" symbol | a nebo .*?
(^ (.*?(;|$)){10} ) | ( (.*?(;|$)){10} $)
(^ (.*?(;|$)){10} ) .*? ( (.*?(;|$)){10} $) -- ale v tomhle pripade bys musel
 mit na vystupu "$1$2", vypis jen zavorek

No, a kdyz bys mel vzdy za stringem strednik, i za poslednim, tak by to slo napsat i takto
(^ (.*?;){10} ) | ( (.*?;){10} $)
.*?; - vyber kazdy znak, dokud nenarazis na ;
peter
Regulární výrazy › Úprava krátkého regulárního…
1. 11. 2020   #386860

- z textu o struktuře CSV
- (.*?(;|$)){20}

To mas ale uplne spatne.

1. csv ma konkretni zpusob zapisu, escapovani a zvlast to plati pro textove polozky. Treba, kdyz text obsahuje strednik nebo zalomeni na dalsi radek. To ten vyraz vubec nezachycuje. Ani nemuze. Csv se totiz parsuje jinak.

2. pokud vynechas bod 1 a budes uvazovat csv bez escapovani, pak, co ti brani nacist soubor radek po radku? Php na to ma funkce. A pak pouzijes  

$sloupce = explode(';', $radek)

3. znacka ^ oznacuje zacatek hledani a $ konec. Kdyz je neuvedes, najde to prvni odpovidajici text. Coz gna vyraz opet plne dostacuje na zadani, ktere popisujes, pri vynechani bodu 1 [skutecne spravne parsovani csv]. Pokud jsi ale zmenil zacani, neco ze zacatku a neco z konce, pak tam musi byt ty znacky.

(.*?(;|$)){20}

(^(.*?(;|$)){10})|((.*?;|$){10}$) - mohlo by to byt nejak takto

Ale, jak rikam, i tak je to spatne, ani se nebudu snazit takove reseni dotahnout do konce. Najdi si v php parser pro csv, jinak na csv muzes zapomenout, ze ho nekdy spravne nactes :)
https://www.php.net/…csv.php ;



<!-- Example #1 Read and print the entire contents of a CSV file -->
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>
peter
Regulární výrazy › Libovolný počet znaků nebo nic
29. 10. 2020   #386853

A, jeste bych se mozna vratil k otazce proc? 

strpos('programujte.com') // a strrpos() je rychlejsi nez reg vyrazy
preg_match('~programujte\.com~')
preg_match('~programujte[.]com~')

A lze to zapsat i bez .* , pokud ti jde o nalezeni fraze v cokolivprogramujte.comcokoliv.
Ale, pokud to potrebujes nahradit i s textem cokoliv, tak tam .* byt musi.
peter
Regulární výrazy › Libovolný počet znaků nebo nic
29. 10. 2020   #386852

kdyz to zkratim na odpoved gna, tak treba takto

preg_match('~.*text.*~', $str)
preg_match('~.[0,]text.[0,]~', $str)
.*text.*
.[0,]text.[0,]
(.)*text(.)*
.*[t][e][x][t].*

+ problemy se zavorkovanim a jine :)
https://www.php.net/…ditional.php

peter
Regulární výrazy › Libovolný počet znaků nebo nic
29. 10. 2020   #386851

#1 fix

Vis, problem take je, pro co ten reg. vyraz potrebujes. Uvedu par prikladu

Dos pouziva  

*text*


Sql pouziva zapis napr:

nazev='abc'
nazev LIKE 'abc'
nazev LIKE '%abc%' -- coz je obdoba dosu *text*
nazev ~* '%@chartio.com'


js, php tam existuji 2 typy, jeden pouzivaji oba, druhy jen php, ale jsou dost podobne, jnze jsou zas rozdilne proti sql :) 

preg_match('~.*text.*~', $str)
preg_match('/.*text.*/', $str) - stejne
str.match(/.*text.*/g)
str.match(/.*text.*/) - to dela uplne neco jineho
str.match(/.*text.*/gm) - take jineho, jine modifikatory
Php ma take modifikatory.

Takze ted je otazka, co presne potrebujes a proc udelat?

- jsou nektere znaky, ktere v textu musis lomitkovat, zkus pouzit preg_quote()
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : - #
https://www.php.net/…eg-quote.php

- tva * se zapisuje jako .*, kde . je libovolny znak, * opakovani 0-nekonecno (.? je opakovani 0-1x; jpe?g = jpg a jpeg) a take to lze zapsat jako  

.[0,]

http://www.regexp.cz/
Je treba si dat bacha, kazdy znak muze mit v nejakem okamziku jiny vyznam

- modifikatory
https://www.php.net/…odifiers.php

- ohraniceni, tusim lze pouzit jakykoliv znak, ale musi byt stejny jako na konci a znaky uvnitr pak asi musis lomitkovat. Takze muzes v php pouzit /, ale i ~#+%, podle toho, co ti vice vyhovuje pro vyraz, nevyskytuje se v nem :)

/http:\/\//
#http://#

https://www.php.net/manual/en/regexp.reference.delimiters.php

- a dalsi zakonitosti, na ktere si treba dat bacha, treba zavorkovani
Tam ma otaznik treba uplne jiny vyznam. Cili zalezi na tom, co je pred znakem
https://www.php.net/…ditional.php

Jinymi slovy, regularni vyrazy jsou zapis ruznych funkci pomoci ascii znaku. Ma to jina pravidla nez *text* nebo matematika a + b + c, kde vis, co je text a co je znamenko bez hlubsiho rozkodovani. Ale tam to jinak nejde, protoze pracuji s celou sadou ascii.

peter
PHP › select ::integer u spatne ul…
20. 10. 2020   #386816

Co ti odpovedel google?
google = postgre sql nahrazeni carky za tecku u ceskych cisel
google = postgre sql prevod cisla s carkou na cislo

DECLARE @String AS VARCHAR(255) = 'Ahoj-já-jsem-text';
SELECT REPLACE(@String,'-',' ') AS String_po_Replace;

Otazkou je, vsak, proc cislo ukladas jako string? A jestli by nebylo lepsi vytvorit si jiny sloupec a do nej ta cisla prevest? Ten puvodni bych si tam nechal, kdyby se vyskytly chyby. Pokud si teda neumis udelat dobrou kontrolu. Treba limit integer, limit float, treba u penez a miliardovych castek.
Pokud se jedna o penize a vim, ze chci jen a pouze 2 desettinna mista, tak cele cislo nasobim 100 a ulozim jako cislo. To by slo pak resit mozna jednoduseji

if (str obsahuje ',' => pozice)
  int(substr(str, 0, pozice)) *100 + int(substr(str, 0, pozice+1)) nebo
  int(str) * 100

Kazdopadne, pokud s tim chces dal v sql dotazech pracovat, tak budes stejne potrebovat to cislo jako indexovany sloupec a ne pokazde prevadet.

peter
PHP › file_get_contents
1. 10. 2020   #386718

#11 Kit
Jakoze, nepopiram, ze je get_headers rychle, o moc rychlejsi nez file_exists a file_get_contents a rychlejsi nez spousteni cmd kvuli par adresam. Proste, zalezi na tom, co presne potrebuje v jakem poctu a tak.

peter
PHP › file_get_contents
1. 10. 2020   #386717

#11 Kit
Jo, jenze ty se bavis o detekci jedne url a ne treba 50.

Ja pred XX lety potreboval propingat asi 30 adres. Zjistit, zda tam existuje soubor a pokud ano, stahnout jeho obsah a najit konkretni string. Nebo porovnat aspon delku, abych zjistil, ze dane stranky funguji.

Predpokladam, ze potrebuje hackovat server a hledat na nem konkretni soubor, o kterem vi, ze jej lze napadnout. Mozna 1000 serveru. CMSka maji nekolik takovych der. Treba obrazek u file_uploaderu (tusim to byl hack u CK/FCK editoru), ktery je mozne spustit pres url. Spousta lidi provozujicich cms nedela updaty.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý