Jak automaticky upravit text?
Zdravim,
mam textovy soubory ve kterem mam asi 100 slov (co radek to slovo). Nedalo by se nejak zautomatizovat prevedeni vsech slov do tvaru:
poleSlov[X] = "mojeSlovo";
X - poradi slova (cislo od 0 do 99)
mojeslovo - je slovo ktere mam v textaku na Xtem radku
Diky MaSo.
Zatím si spusť příkaz v cmdline:
for /L %i in (0,1,99) do @echo poleSlov[%i] = >> temp.txt
V druhém kroku sesmolím příkaz kterej tam přidá ty slova
Ok, mam. Zatim to funguje skvele
Určitě to nějak jde udělat, ale zasek jsem se na studiu možností příkazu FOR
Ajaj, tudy asi cesta nepovede. FOR dokáže postupovat souborem řádek po řádku, dokonce rozdělit řádky na tokeny, ale tady je potřeba procházet 2 soubory zároveň a skládat to dohromady. To asi komandlajna nesvede
Řekl bych, že v tvém kódu chybí ješětě jeden znak procent (%%i).
Jinak jsem zkusil udělat vlastní řešení, skoro by to fungovalo, jen jsem narazil na takový triviální problém s přesměrováním, že mi příkaz ECHO odřádkuje na nový řádek, což nechci. Neví někdo, jak tomu zabránit?
Příklad:
A já potřebuju dostat v tom souboru
nikoliv
Windows/DOS ECHO vždycky odřádkuje. Hodilo by se, aby existoval přepínač echo -n jako v UNIXu pro potlačení odřádkování.
%%proměnná se u příkazu FOR musí používat v dávkových souborech
u jednorázového příkazu stačí %proměnná
Jinak ta možnost vyřešit MaSův problém čistě pomocí příkazové řádky je docela výzva.
Pokud to někdo dokáže, má můj obdiv
No chvíli jsem se s tím drbal, dosáhl jsem výsledku až na to, že tam mám nežádoucí odřádkování... Možná by šlo jednotlivé části nacpat do proměnných a pak přesměrovat najednou nějak takto:
Nebo alternativní řešení, kdyby šlo vložit do cyklu FOR počítadlo, ale to se mi nepovedlo. Nějak takto:
A koneckonců MaSo neuvedl, pro jaký to chce OS, takže....
Sice jsem neuvedl OS ale moje reseni pujde na vsech, kde je java, takze...
Haha. To je jako kdybych napsal: "Moje řešení půjde všude, kde jsou Widle", takže...
V PSPadu by se to dalo resit take
v 1.kroku si vlozim pred kazde slovo cislo (Vlozit text Alt+I)
ve 2.kroku pouziju regulani vyraz, kterym provedu nahrazeni nebo jako alternativu si nahraju makro, ktere dopise na radek omacku okolo a to makro necham 100x probehnout
Tak jsem to nakonec vyresil malym programkem v Javě. Diky vsem za snahu a hlavne tobe Javo!
Pokud jsi schopny programovat v Jave, mohl sis napsat jednoduchy JavaScript pro PSPad a pomoci nej primo upravit jednotlive radky
Javu sice trochu umim, zato JavaScript mi nic nerika.
pomocí sed nebo awk bys to měl na řádku kódu...
Prijimam Maslovu vyzvu
Ak to robí to, čo to má robiť (teraz už nevládzem čítať, čo to vlastne robí ), tak by som to ešte zmenil tak, aby to bolo len v jednom baťáku:
No, tak to je parada! O trochu jednodussi nez muj programek v Jave. Pekne Ynd0r!
los: Joo! Diky, na "call :label" jsem si nevzpomel - uz je to precejen par let...
MaSo:
Chyba! call sa dá použiť len na volanie BAT súboru a tu sa môže použiť len goto. V každom prípade sa to po vykonaní "podprogramu" nevráti na pôvodné miesto, takže smola.
chyba. keby si dal miesto call goto, tak tvrdo odskoci z for cyklu a uz sa nevrati. preto je vhodne dat call. a kratky popis call: call akceptuje ako cieľ volania menovky(navestia)
A čo je potom "return"?
"return" je v basicu
Ale to viem od nejakých 7 rokov. Myslel som to inak, hádam to bolo pochopiteľné.
Ted te nechapu.. jak bys teda chtel dat do BATu "return"?
Ako DOS zistí, že sa má vratiť do toho for?
protoze CALL zavola davku BAT, provede ji, a po skonceni se vrati presne na to misto, odkud ji volal.
navic CALL umoznuje pouzit navesti (viz losova uprava), takze se takhle da volat i konkretni misto v BATu.
a kdyz v CALLu vynechas nazev BATu a pouzijes jenom navesti, tak se vlastne vola znovu tentyz BAT, ze ktereho volas, akorat ze se spusti az od toho navesti... a az dobehne na konec, tak se vrati na puvodni misto a pokracuje.
krome toho pri volani CALL zrejme spusti volany BAT ve vnorenem shellu (pod aktualnim shellem), takze jsou z nej viditelne promenne z puvodniho BATu.
Nevim co tu resite, vzdyt to co napsal los funguje.
když už, tak takto:
OMG, takto ne, seskupením (asi) dochází k iniciaci dalšího shellu, kde proměnná "poc" je pokaždé znova inicializována
Teď jsem si to vyzkoušel a chová se to přesně takto.
Určite s programovaním máš už nejaké skúsenosti. musíš teda vedieť, že kvalita programového kódu nespočíva v jeho krátkosti, ale v jeho prehľadnosti. Ten trošku dlhší kód je prehľadnejší a tvoj až príliš krátky, že to systém ohodnotil zhoršenou známkou za kvalitu.
to je ale teda kapitální blbost!
Já sice už neprogramuju, ale efektivita kódu je svatý grál programování, to mi nikdo nevymluví. Nějaké "wirthovské" strukturování kódu je vhodné tak pro pojídače koláčů, takový triviální algoritmus není třeba rozepisovat na X řádků.
BTW, asi i proto jsou ty dnešní softy čím dál tím nenažranější
Veď na konci bolo:
Jak potom okomentujes moji verzi 2 dole ? (18:34)
tak na tomto presne som zatuhol aj ja, mal som to presne rovnako. mam zato, ze nedochadza k inicializacii noveho shellu, ale premenna proc sa vo vnutri for bufferuje a flush nastane az po skonceni for. je to skratka humus.
ano, je to tak, je to psané i v helpu windows - proměnná je evaluována pouze jednou.
MS jsou prostě žabaři
jj, tak to potes pan buh. nastasie uz bill zistil, ze dobry shell je pre system podstatny a konecne zacal robit na poriadnom shelly. monad uz ozaj vyzera dobre. chystam sa ho testovat, len ten blby cas mi akosi neostava.
Super, gratuluji! První funkční řešení. Já věděl že to jde vyřešit efektivně pomocí windows shellu, pár řádků kódu.
p.s. Pamatuje ještě někdo Nortonův be.exe (batch enhancer), který v časech DOSu umožňoval v dávkáčích tvořit pěkná menu, okna, barvičky, dokonce i melodie tam šla zahrát
tak to ma nejako obislo a pritom shell mam celkom rad.
Diky
BE.EXE ani ne, ale zato jsem se v mladi vyblbnul s 4DOSem..
Vlastne to jde i bez CALLu :
(je to do BATu, primo v commandline by se muselo misto kazdeho "%%" dat jen "%")
Tak na to som už krátky. Pravdu povediac, vždy keď som chcel niečo urobiť, tak som siahol po univerzálnom nástroji: Turbo Pascal 7.0. Nech mu je zem ľahká a nech odpočíva v pokoji. Bolo to dlhé roky moje najoblúbenejšie IDE.
tak toto uz vyzera dobre hardcore.
Jo FOR je úžasnej příkaz, však má taky pěkně dlouhou nápovědu
Moje srdce plesá při takovéhle jednořádkové racionalizaci, zvláštní bod uděluji za `find /v /n "fuck ms" slova.txt`
p.s. I když tohle už neodpovídá MaSovu zadání, index neběží od nuly ale od jedničky. Nicméně ten trik s použitím číslování z výstupu příkazu find oceňuji
...jsem si myslel, ze to prehlidnete... Dobre, pritvrdime:
(do BATu)
zapomněl jsi za sebou ještě ten x.bat smazat
No, mel by si po sobe uklidit... takze verze 1.03 beta:
Changelog:
1.03
- vymaze po sobe smeti
- vyrazne zrychleni (az 20x)
tak toto vyzera este viac hardcore, ale efektivnost sa uz straca. btw., vyzera, ze mas celkom dobre skills, nechces si ich odskusat tu?: www.hackthissite.org. a keby si nieco potreboval, mozes poslat PM na IgorK.
Efektivnost ze se ztraci? ...tak jeden efektivni batch (musi se jmenovat "Q.BAT" a je jenom na jedno pouziti):
Uz je to lepsi?
Diky za link, to vypada zabavne..
tak hod sem nick name, nech mozme niekedy pokecat cez PM.
Ten animovaný GIF naľavo hore je tvoj avatar? Nemáš niečo také ale väčšie? Pekná animácia to je. Nemáš aj iné také zaujímavé animácie?
jj, je to moj avatar. vacsie nemam nic, to so nasiel niekde na internete v sekcii avatars. mam este nejake pekne avatary ale tie mam schovane pre seba do zalohy.
To GIFko som si hodil do telefónu ako pozadie. Dobre to tam vyzerá, keďže je to malé a navyše ho neprekrýva názov operátora.