Jestli v tom je nějaká logika, tak mi ji vysvětli. Nakonec to vypadá, že jen chceš odstranit ty oddělovače.
Příspěvky odeslané z IP adresy 213.211.51.–
Aha. Tak to asi bude nejjednodušší to vzít od #1 do $2 a až pak rozdělit, pokud v tom je další #1.
>>> data = """#1aa#1bb$2cc
... #1dd$2ee#1ff
... gg#1hh$2ii
... #1jj$2kk
... #1ll$2mm#1nn$2oo#1pp$2qq"""
>>> matches = re.findall(r'#1(.*?)\$2', data, re.DOTALL)
>>> print(matches)
['aa#1bb', 'dd', 'ff\ngg#1hh', 'jj', 'll', 'nn', 'pp']
>>> matches = [match.split('#1') for match in matches]
>>> print(matches)
[['aa', 'bb'], ['dd'], ['ff\ngg', 'hh'], ['jj'], ['ll'], ['nn'], ['pp']]
>>> matches = list(itertools.chain.from_iterable(matches))
>>> print(matches)
['aa', 'bb', 'dd', 'ff\ngg', 'hh', 'jj', 'll', 'nn', 'pp']
vypísalo text, ktorý začína #1 a končí na $2 a #1
nevypísalo text medzi #1 a #1
To si nedovedu představit. Ukaž vzorek dat.
To by chtělo vidět ta data. Toto?
>>> data = 'aa #1xx#1 bb #1yy$2 cc'
>>> re.findall(r'#1(.*?)(?:#1|\$2)', data)
['xx', 'yy']
*? je non-greedy match
(: je non-capturing group
| je "nebo"
Kolem toho bloku za else dej begin-end.
View v SQL je uložená definice Selectu, která se tváří jako tabulka.
Podle mě máš napsat program pro sběr dat z Loratechu a sypat je do SQL serveru. Ke komunikaci s Loratechem asi bude nějaká dokumentace. Pro spojení s SQL Serverem můžeš použít pyodbc a samotné SQL se můžeš naučit kdekoliv
Ta aplovka a webovka pak asi čte data z toho SQL serveru. Těžko hádat detaily. Zřejmé je jen to, že bys to asi ani neměl zkoušet.
Proměnné vytvořené ve funkci jsou lokální, tj. viditelné a existující jen v té funkci. Můžeš to obejít použitím global. Pak je dobré aspoň je ještě explicitně globálně definovat, ať to není tak, že se prostě nějak "vyskytnou". Celkově to je trochu čuňárna, ale pro začátečníky nejjednoduší možnost, než se to naučí lépe.
uthrac = defhrac = zivhrac = 0
utproti = defproti = zivproti = 0
def hrac():
global uthrac, defhrac, zivhrac
uthrac = ...
def proti():
global utproti, defproti, zivproti
utproti = ...
Když chceš vracet více hodnot, tak je můžeš "zabalit" do jedné. Tady třeba jako tuple:
def vygeneruj_postavu():
utok = ...
obrana = ...
zivot = ...
return (utok, obrana, zivot)
# můžeš to držet v celku
hrac = vygeneruj_postavu() # hrac[0] je utok, atd.
protivinik = vygeneruj_postavu()
# nebo "rozbalit"
uthrac, defhrac, zivhrac = vygeneruj_postavu()
utproti, defproti, zivproti = vygeneruj_postavu()
A vyloženě se nabízí použití objektů. To se zkus naučit co nejdříve.
class Osoba:
def __init__(self, jmeno):
self.jmeno = jmeno
self.utok = ...
self.obrana = ...
self.zivot = ...
def vypis(self):
print(self.jmeno, self.utok, self.obrana, self.zivot)
hrac = Osoba('hrac')
protivnik = Osoba('protivnik')
hrac.vypis()
protivnik.vypis()
Zkus hranaté závorky.
[neco]
Některé "hopy" prostě neodpovídájí, takže timeouty jsou normální. Ale chování toho tvého routeru není normální. Jestli je tvůj lokální, tak se zkus podívat do logů, možná je přetížený, možná ho bude stačit restartovat, možná umírá :) Jestli je u poskytovatele, tak se obrať na něj.
1. Takže chceš vykrást data z jiného webu.
2. HTML se neparsuje regulárními výrazy.
3. Nějaké chyby? Jaké?!
$options = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
];
$context = stream_context_create($options);
$contents = file_get_contents('url', FALSE, $context);
$matches = [];
preg_match_all('|>\s*([\w\s]+)</td><td.*?>(\d+)<.*?/td></tr>|', $contents, $matches, PREG_SET_ORDER);
print_r($matches);
Array
(
[0] => Array
(
[0] => >Points</td><td>640</td></tr>
[1] => Points
[2] => 640
)
[1] => Array
(
[0] => > Kills</td><td>1</td></tr>
[1] => Kills
[2] => 1
)
[2] => Array
(
[0] => > Deaths</td><td><span class='zero'>0</span></td></tr>
[1] => Deaths
[2] => 0
)
...
#23 Mutagen
Už jsem to psal, postup ukládání je takový jaký má být, pouze upravuju a přemýšlím jak by se to dalo zlepšit.
Ovšem ty jsi jediný, kdo ví, jaký ten postup je, takže těžko radit, jak ho zlepšit.
Podle mě jsi teď potvrdil mou domněnku, že BinaryWriterem naplníš MemoryStream, který jinak nepotřebuješ a jen ho nakonec dumpneš do FileStreamu. Takže do BinaryWriteru dej rovnou FileStream. Hotovo.
Vypadá to, že místo obyčejného vložení by mohl jít inteligentnější import ze schránky.
Uživatelsky přívětivější bude vložit to do schránky jako XML SpreadSheet.
https://stackoverflow.com/questions/15764828/c-sharp-add-excel-text-formatted-data-to-clipboard
#18 Mutagen
Ono není jasné, co s těmi daty potřebuješ dělat. Mně to připadá, že BinaryWriterem naplníš MemoryStream a ten pak bez změny celý zapíšeš do souboru. Tak vlastní zápis vyhoď a místo MemoryStreamu dej rovnou FileStream (ten má interní buffer 4K, který bych zvýšil třeba na 4M ať to na disk nehrabe moc často, pokud by default byl hodně pomalý).
Nějak nevím, co na tom chceš vymýšlet.
string ins = str;
for (int i = 2; list.Contains(ins); i++)
ins = String.Format("{0} ({1})", str, i);
list.Add(ins);
#4 Mutagen
To se mi prostě nezdá že by winform alokoval pamět tak hrozně že se to prostě s prominutím posere.
Ty související knihovny a data dohromady dají docela dost. Podívej se kolik ten program žere po spuštení a kolik ti z těch 2G zbývá. Ale nemusí alokovat hrozně, stačí ta fragmentace. Můžeš mít 400M volných, za tím 1M využitých a na konci zase 400M volných, takže máš 800M volných, ale 500M z toho nevykousneš.
Když jsi to už načnul, jak u binarywriteru dopředu naalokuju pamět?
BinaryWriter jen tlačí data do Streamu. Jestli je to právě MemoryStream, tak tomu můžeš zadat výchozí kapacitu při vytváření. Když teda rovnou začneš na těch 350M, které nepřekročíš, tak se vyhneš tomu automatickému zvětšování z 268M na 536M, ale 350M je pořád hodně.
Řešení s nejmenšími změnani bude nahradit ten Stream. Našel jsem třeba MemoryTributary, který to drží v menších blocích, nebo rovnou použij soubor.
32-bit proces má k dispozici "jen" 2G virtuální paměti, takže souhlasím s uchem, že alokuješ docela hodně. Nemyslím si, že by to GUI nějak šíleně žralo, ale může být paměť fragmentovaná tak, že se takový blok prostě nikam nevejde i když máš třeba celkově pořád dostatek volné paměti.
Navíc tam asi někde figuruje MemoryStream, což je souvislý blok paměti a při zvětšování kapacitu zdvojnásobuje. Nebo něco podobného. To by odpovídalo tomu, že ti to buď klekne na 268M, nebo projde na 536M. Tam by mohlo pomoct zadat požadovanou kapacitu předem, pokud ji znáš, ať neplýtváš.
Jinak klasika -- ujisti se, že nikde nekopíruješ nic, co nemusíš a uvolňuješ všechno, co nepotřebuješ. Myslím, že ve VS je nějaký memory profiler, který by ti mohl ukázat, co kde visí. Ideálně to uprav tak, ať velké bloky paměti vůbec nepotřebuješ.
#6 Hajas
Můžeš to "escapnout" zpětným lomítkem. string literal, escape sequences.
" \" \\ "
string cmd = "start " + GetCurrentWorkingDir() + "/KKK.txt";
system(cmd.c_str());
#6 zak
PHP: Operator Precedence
==
||
=
or
Podmínka testuje text buttonu, třeba to bude v tom...
To jsi tam neměl dát, ale pozorně si to přečíst. Je to zkrácenina toho, co tam snad už máš.
Při prvním kliknutí by se to mělo připojit (client nastavit) a při dalším odpojit. Tobě to z nějakého důvodu jde do odpojení bez připojení. Podmínka testuje text buttonu, třeba to bude v tom...
U těch formátovacích funkcí to jde i oříznout. {:36.36}
print("+", 40*"-", "+", sep='')
print("|", 2*" ", jmeno, (40-2-len(jmeno))*" ", "|", sep='')
print("|", 2*" ", jmeno.ljust(36), " |", sep='')
print("| {:36} |".format(jmeno))
#Py3.6 print(f"| {jmeno:36} |")
print("+", 40*"-", "+", sep='')
No, client je Nothing. Čím to může být, když ten kód vypadá zhruba takhle?
If Button1.Text = "Connect" Then
client = New TcpClient(TextBox1.Text, CInt(TextBox2.Text))
Button1.Text = "Disconnect"
Else
client.Client.Close()
client = Nothing
Button1.Text = "Connect"
End If
Jestli chceš přesměrovávat HTML refreshem, tak to je záležitost obsahu a kódu se to netýká. Bude to výchozí 200.
Jestli posíláš hlavičku Location, tak bude kód automaticky 302 (a posílat nějaký obsah je zbytečné).
Takže kódy prostě neřeš.
To vytvoření je teda pěkně divný.
Ale jinak ti ta zpráva vrátí bitmapu, které tam byla původně. A tu je potřeba smazat, ne tu kterou jsi tam zrovna poslal.
Ahá. No, ta moje funkce předpokládá icon jako 0 až 4 a asi není tak čitelná, jak jsem si myslel ;)
Ty metody se provádějí v pořadí v jakém jsou zapsané.
V tomhle případě ve výsledku nebude rozdíl, ale jindy samozřejmě může.
Tu 5 mám samozřejmě blbě :D
Koukám do toho 5 minut a nějak mi uniká ten myšlenkový pochod. Piš věci debilně, tak je pochopíš i zítra.
bool IsIconActive(int icon, int grp)
{
int indicators[]={0x01, 0x02, 0x08, 0x10, 0x30};
bool isset[]={false, false, false, false, false};
for (int i = 5; i >= 0; i--) {
int ind = indicators[i];
if (grp >= ind) {
grp -= ind;
isset[i] = true;
}
}
return isset[icon];
}
select sum(castka), dph ... group by dph;
sizeof(outStr) je velikost ukazatele, ne toho na co ukazuje. Ta funkce je šílená.
tmpData nemusíš přetypovávat, pokud to rovnou deklaruješ jako unsigned char (nebo typ určený pro oktet/byte místo šaškování s chary).
Jinak jo, spojíš to bitovými operátory :)
Různě formátovaný text umí třeba RichTextBox. Text prostě projdeš a tagy (asi stačí řešit jako první slovo za otevírací závorkou) označíš a obarvíš pomocí vlastností SelectionStart, SelectionLenght a SelectionColor. V příkladech v dokumentaci je všechno, co potřebuješ.
#3 Kevil
sample01.cc
Na tom odkazu jsou parametry ve správném pořadí. Netuším, jak jsi vyrobil tohle.
Jo a to plus jen možná? Tak na to je otazník.
'/\^([0-9]\+?)\^/'
Ta stříška má v RE speciální význam. Ten můžeš zrušit zpětným lomítkem.
'/\^([0-9][+])\^/'
I to plus je takhle trochu divné, ale ničemu to nevadí.
Pokud ten mapping vytváříš, tak bude vyplněný nulami. Pokud už existuje, tak bys asi měl dostat ERROR_ALREADY_EXISTS.
Na otevření existujícího je OpenFileMapping.
V konzoli by to mělo fungovat. Myslím si, že to spouští v nějakém IDE, které ten výstup zachytává a interpretuje jinak.
Vychází to z toho, že častým příkladem v OOP je třída/interface Zvíře, které umí vydávat zvuky a pak třídy Pes a Kočka, které vydávání zvuku implementují různě. (Což je pro praxi blbý příklad, ale je na tom vidět, jak to funguje). Jen to trošku rozšíříš.
Tak třeba udělej dvoreček se zvířaty a miskami. Zvířata postupně obcházejí misky a když najdou to, co jim chutná, tak trochu sní a vydají zvuk. Když nenajdou, tak chcípnou. A opakovat, dokud všechny nevychcípou :)
Není zač.
Teda nepůjde jedním příkazem. Postupně to samozřejmě půjde :)
SQL je sice stringlist, ale myslím, že se skládá dohromady a je to jen jeden příkaz.
MySQL podporuje multi-statement. Pokud to jde nějak zapnout, tak by stačilo jednotlivé příkazy oddělit středníkem. Jinak to asi nepůjde.
To samozřejmě nespočítáš bez toho, že by sis ty výskyty nějak pamatoval(a). Když se to nevejde do paměti, tak třeba do souboru. Pokud prostě není možnost si to pamatovat, tak se to dá jen odhadovat, ale kdybyste řešili takové algoritmy, tak nepřijdeš s tímhle dotazem.
Tady možná půjde o to, že ti na každé číslo stačí jeden bit.
Jasně, přesně na to ta hláška vypadá...
Aha, takže to není tvůj výtvor...
No, proměnnou cislo nemáš, ale máš proměnné prvni_cislo a druhe_cislo. Co teď asi s tím? :) Pak ještě někde vzít operaci a výsledek a pak bacha na to, co udělá to sčítání.
Nevím, co myslíš hlavní funkcí, ale místo, kde se ta operace provádí a máš tam všechna data, je ve funkci volba.
Ta nápověda otevře soubor a něco do něj zapíše. V čem konkrétně je problém?
Proč chceš použít funkci, o které netušíš, co dělá? Takovou funkci k ničemu nepotřebuješ.
Pokud je to čistá funkce bez vedlejších efektů, tak stačí zkusit všechny hodnoty parametru (0..65535) a dostaneš všechny možné výsledky. Logování samozřejmě zkusit můžeš. Nejjistější je prostě se podívat na její kód.
"." je aktuální adresář a ".." nadřazený adresář. Jsou automaticky ve všech adresářích a pointa toho ifu je tyhle položky ignorovat.
drwxrwxrwt 2 root root 4096 Mar 12 18:38 cidla
Ten antribut 't' znamená "restricted deletion". Pokud ho tam nemáš záměrně, tak ho můžeš odstranit pomocí
chmod -t cidla
Toto asi není správně (nevidím vztah mezi vstupem a výstupem) a určitě by to někdo napsal chytřeji. Jde jen o princip.
Nechápu dotaz. To co jsi napsal prostě v tom programu udělej.
for (int y = 1; y < m; y++) {
matice[y][1] = y;
for (int x = 2; x < n; x++) {
int predchozi = matice[y][x-1];
int pridat = (x - 1) * y;
matice[y][x] = predchozi + pridat;
}
}
Závislost na té knihovně jsi přidával ručně? Pokud ano, tak to pravděpodobně mělo být
user32.lib
A to "nefunguje" znamená co?
const float pi = 3.14f;
for i in range(x):
Z parametry_okna vyhoď ty uvozovky.
Já bych tipl, že ta funkce selže a v tom pointu je "náhodná" hodnota.
Tak můžeš načíst to číslo celé, taky ho nemusíš převádět sám, ale jestli to chceš dělat tímhle stylem, tak spíš nějak takhle:
int value = 0;
int ch, digit;
while ((ch = cin.get()) != '\n' && ch != EOF) {
if (ch >= '0' && ch <= '9') {
digit = ch - '0';
} else if (ch >= 'a' && ch <= 'f') {
digit = ch - 'a' + 10;
} else if (ch >= 'A' && ch <= 'F') {
digit = ch - 'A' + 10;
} else {
cout << "je to rozbity\n";
break;
}
value *= 16;
value += digit;
}
malloc alokovanou paměť nijak neinicializuje a ty nastavuješ jen první znak. To "kukátko" ví jen to, že je to řetězec (který se ukončuje nulovým znakem) tak zobrazí i to smetí za tím.
_tcscpy(m_settings.separator, _T(";"));
setInterval zrušíš pomocí clearInterval a load umožňuje zadat funkci, která se provede po načtení.
Tři věci:
1) to pole má jeden prvek
2) scanfu je potřeba předat ukazatel
3) %f je float, pro double je %lf (u printfu na tom nesejde, protože se float předává stejně jako double, ale u scanfu je potřeba použít správný formát, protože jde u různé typy)
double point_A[2]; // 2
scanf("%lf", &point_A[0]); // %lf, &
printf("%f", point_A[0]);
WCHAR znak = (WCHAR) strtoul(CharStr, 0, 16);
Ta escape sekvence ve zdrojáku se při překladu vyhodnotí. Takže v tom stringu není lomítko-iks-jedna-nula-d, ale je tam č (respektive to co na daném systému má tuhle hodnotu, na to taky bacha).
Jestli ze souboru načítáš takovéhle sekvence, tak je pak musíš ještě interpretovat. Nevím, jestli je na to nějaká pěkná funkce, ale projít to po znacích není žadný problém.
Ono to funguje, akorát to nefunguje :D Jak jsem psal, já vidím jen dva problémy a netuším, co ti na nich uniká, když je celá věc na jediném řádku a prostě se nejde podívat jinam.
Ale možná naopak mně uniká s čím konkrétně máš problém, tak mi to nějak přibliž.
if ((uhel > 0) && (uhel < 180)) {
Úhel větší 0 a menší než 180 je špatně?
double soucet = strana*strana+strana2*strana2-2*strana*strana2*Math.cos(uhel);
Takhle je ten vzorec, nic tam nechybí?
Nějak tam toho kódu není tolik, abys nevěděl kam se podívat, když něco funguje špatně.
Mě se nezdá test hodnoty úhlu a výpočet té strany. U obojího jde o jeden řádek :D
Šlo by to přesně tak jak popisuje s použitím IN na subquery.
... WHERE neco IN (SELECT ...)
Ale spíš to máš špatně navržené a vymýšlíš kravinu.
Nejde.
Nechce se mi to moc studovat, ale za ten sin/cos bych lámal prsty. Samozřejmě začneš tím, že budeš používat vektory (a matice).
u printfu máš špatně závorku
printf("%.0f \t %.3f\n"), plocha, centi; // toto
printf("%.0f \t %.3f\n", plocha, centi); // takhle
int a = vstup.nextInt();
int b = vstup.nextInt();
if (a == b) {
System.out.println("Čísla sú rovnaké");
} else {
if (a < b) {
int x = a;
a = b;
b = x;
}
System.out.println(a + " " + b);
}
Podmínky asi trochu chápeš, když je tam máš hned 3. Můžeš podmínit i ten výpis.
Dependencies
Python3, tensorflow 1.0, numpy, opencv 3.
Ani jeden řádek nedává smysl. Napiš pořádně, co chceš a co ti nejde.
Tak to tu funkci asi používáš blbě.
LogPost("%s", zprava);
Testování je pakárna, věnuj se pivu a holkám, dokud můžeš.
Jinak je to celkem asi jedno a nemusíš se nějak připravovat, všechno se naučíš za pochodu.
Je v dnešní době něco překvapivého na tom, že skript nemůže k obsahu, ke kterému nemá povolení?
Nechápu dotaz. Pokud zdrojový server neumožňuje stahování po částech, tak prostě neumožňuje stahování po částech.
Postřehli jste, že v tom odkazu je i implementace? Prostě není co řešit.