Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Předmět Autor Datum
Zatím si spusť příkaz v cmdline: for /L %i in (0,1,99) do @echo poleSlov[%i] = >> temp.txt V druhé…
Máslo 18.05.2006 13:26
Máslo
Ok, mam. Zatim to funguje skvele ;-)
MaSo 18.05.2006 13:29
MaSo
Určitě to nějak jde udělat, ale zasek jsem se na studiu možností příkazu FOR :-[
Máslo 18.05.2006 13:40
Máslo
Ajaj, tudy asi cesta nepovede. FOR dokáže postupovat souborem řádek po řádku, dokonce rozdělit řádky…
Máslo 18.05.2006 13:54
Máslo
Řekl bych, že v tvém kódu chybí ješětě jeden znak procent (%%i). Jinak jsem zkusil udělat vlastní ř…
host 18.05.2006 17:10
host
Windows/DOS ECHO vždycky odřádkuje. Hodilo by se, aby existoval přepínač echo -n jako v UNIXu pro po…
Máslo 18.05.2006 17:45
Máslo
Jinak ta možnost vyřešit MaSův problém čistě pomocí příkazové řádky je docela výzva. Pokud to někdo…
Máslo 18.05.2006 17:56
Máslo
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…
host 18.05.2006 18:00
host
Sice jsem neuvedl OS ale moje reseni pujde na vsech, kde je java, takze...:-p
MaSo 18.05.2006 22:24
MaSo
Haha. To je jako kdybych napsal: "Moje řešení půjde všude, kde jsou Widle", takže...:-p8-)
host 19.05.2006 10:06
host
V PSPadu by se to dalo resit take v 1.kroku si vlozim pred kazde slovo cislo (Vlozit text Alt+I) ve…
Jan Fiala 18.05.2006 13:54
Jan Fiala
import java.io.*; public class vygenerujSoubor { public static void main( String [] args ) { int i =…
MaSo 18.05.2006 21:25
MaSo
Pokud jsi schopny programovat v Jave, mohl sis napsat jednoduchy JavaScript pro PSPad a pomoci nej p…
Jan Fiala 19.05.2006 06:02
Jan Fiala
Javu sice trochu umim, zato JavaScript mi nic nerika.;-)
MaSo 19.05.2006 12:43
MaSo
pomocí sed nebo awk bys to měl na řádku kódu... :-)
touchwood 19.05.2006 08:36
touchwood
Prijimam Maslovu vyzvu :-) ============ a.bat ====================== echo SEZNAM SLOV > seznam.txt…
Ynd0r 18.05.2006 23:57
Ynd0r
Ak to robí to, čo to má robiť (teraz už nevládzem čítať, čo to vlastne robí :-|), tak by som to ešte…
los 19.05.2006 00:19
los
No, tak to je parada! O trochu jednodussi nez muj programek v Jave. :)) Pekne Ynd0r! :beer::beer:
MaSo 19.05.2006 00:25
MaSo
los: Joo! Diky, na "call :label" jsem si nevzpomel - uz je to precejen par let... :-) MaSo: :beer:8-…
Ynd0r 19.05.2006 00:32
Ynd0r
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…
msx. 19.05.2006 06:21
msx.
chyba. keby si dal miesto call goto, tak tvrdo odskoci z for cyklu a uz sa nevrati. preto je vhodne…
IgorK 19.05.2006 08:19
IgorK
A čo je potom "return"?
msx. 19.05.2006 11:35
msx.
"return" je v basicu :))
Ynd0r 19.05.2006 11:49
Ynd0r
Ale to viem od nejakých 7 rokov. Myslel som to inak, hádam to bolo pochopiteľné.
msx. 19.05.2006 12:02
msx.
Ted te nechapu.. jak bys teda chtel dat do BATu "return"?
Ynd0r 19.05.2006 12:05
Ynd0r
Ako DOS zistí, že sa má vratiť do toho for?
msx. 19.05.2006 12:34
msx.
protoze CALL zavola davku BAT, provede ji, a po skonceni se vrati presne na to misto, odkud ji volal…
Ynd0r 19.05.2006 12:45
Ynd0r
Nevim co tu resite, vzdyt to co napsal los funguje. :-)
MaSo 19.05.2006 12:42
MaSo
když už, tak takto: echo SEZNAM SLOV > seznam.txt set poc=0 for /F %%s in (slova.txt) do (echo pole…
touchwood 19.05.2006 08:57
touchwood
OMG, takto ne, seskupením (asi) dochází k iniciaci dalšího shellu, kde proměnná "poc" je pokaždé zno…
touchwood 19.05.2006 09:20
touchwood
Určite s programovaním máš už nejaké skúsenosti. musíš teda vedieť, že kvalita programového kódu nes…
msx. 19.05.2006 12:04
msx.
to je ale teda kapitální blbost! Já sice už neprogramuju, ale efektivita kódu je svatý grál program…
touchwood 19.05.2006 15:41
touchwood
Veď na konci bolo:;-)
msx. 19.05.2006 18:42
msx.
Jak potom okomentujes moji verzi 2 dole ? (18:34) :-D
Ynd0r 19.05.2006 18:45
Ynd0r
tak na tomto presne som zatuhol aj ja, mal som to presne rovnako. :-/ mam zato, ze nedochadza k inic…
IgorK 19.05.2006 15:32
IgorK
ano, je to tak, je to psané i v helpu windows - proměnná je evaluována pouze jednou. MS jsou prostě…
touchwood 19.05.2006 15:39
touchwood
jj, tak to potes pan buh. :-) nastasie uz bill zistil, ze dobry shell je pre system podstatny a kone…
IgorK 19.05.2006 15:50
IgorK
Super, gratuluji! :-):beer: První funkční řešení. Já věděl že to jde vyřešit efektivně pomocí window…
Máslo 19.05.2006 16:12
Máslo
Pamatuje ještě někdo Nortonův be.exe ... tak to ma nejako obislo a pritom shell mam celkom rad. :-)
IgorK 19.05.2006 16:20
IgorK
:)) Diky BE.EXE ani ne, ale zato jsem se v mladi vyblbnul s 4DOSem..
Ynd0r 19.05.2006 16:20
Ynd0r
Vlastne to jde i bez CALLu :i: : for /F "usebackq skip=2 tokens=1,2* delims=[]" %%i in (`find /v /n…
Ynd0r 19.05.2006 18:34
Ynd0r
Tak na to som už krátky. Pravdu povediac, vždy keď som chcel niečo urobiť, tak som siahol po univerz…
msx. 19.05.2006 18:49
msx.
tak toto uz vyzera dobre hardcore. ;-):beer:
IgorK 19.05.2006 19:33
IgorK
Jo FOR je úžasnej příkaz, však má taky pěkně dlouhou nápovědu :-) Moje srdce plesá při takovéhle je…
Máslo 19.05.2006 19:41
Máslo
...jsem si myslel, ze to prehlidnete... Dobre, pritvrdime: :)):x: echo @echo off>x.bat&for /f "skip…
Ynd0r 19.05.2006 22:46
Ynd0r
zapomněl jsi za sebou ještě ten x.bat smazat :-D]:)
touchwood 20.05.2006 08:42
touchwood
No, mel by si po sobe uklidit... takze verze 1.03 beta: echo @echo off>x.bat&(for /f "skip=2 tokens…
Ynd0r 20.05.2006 10:56
Ynd0r
tak toto vyzera este viac hardcore, ale efektivnost sa uz straca. :-D btw., vyzera, ze mas celkom do…
IgorK 20.05.2006 11:32
IgorK
Efektivnost ze se ztraci?:-D ...tak jeden efektivni batch (musi se jmenovat "Q.BAT" a je jenom na je…
Ynd0r 20.05.2006 20:32
Ynd0r
tak hod sem nick name, nech mozme niekedy pokecat cez PM. 8-)
IgorK 20.05.2006 22:39
IgorK
Ten animovaný GIF naľavo hore je tvoj avatar? Nemáš niečo také ale väčšie? Pekná animácia to je. Nem…
msx. 20.05.2006 20:36
msx.
jj, je to moj avatar. vacsie nemam nic, to so nasiel niekde na internete v sekcii avatars. mam este…
IgorK 20.05.2006 22:35
IgorK
To GIFko som si hodil do telefónu ako pozadie. Dobre to tam vyzerá, keďže je to malé a navyše ho nep… poslední
msx. 21.05.2006 00:18
msx.

Ř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:

echo AAA >>soubor.txt
echo BBB >>soubor.txt

A já potřebuju dostat v tom souboru

AAABBB

nikoliv

AAA
BBB

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:

echo %prvni% %druhy% %treti% >> soubor.txt

Nebo alternativní řešení, kdyby šlo vložit do cyklu FOR počítadlo, ale to se mi nepovedlo. Nějak takto:

pocet=0
FOR ... (
...
pocet += 1
)

A koneckonců MaSo neuvedl, pro jaký to chce OS, takže.... :-p

import java.io.*;
 
public class vygenerujSoubor
{
  public static void main( String [] args )
  {
    int i = 0;
    String[] pomocne = new String [99];
    try
    {
       FileReader fro = new FileReader( "a.txt" );
       BufferedReader bro = new BufferedReader( fro );

       String stringFromFile = bro.readLine( );
       pomocne[0] = stringFromFile;
 
       	while( stringFromFile != null ) 
       	{
         	 i++;
         	 stringFromFile = bro.readLine();  
         	 pomocne[i] = stringFromFile;
       	}
 
       	bro.close( );
       	char b = '"';
       	Writer out = new FileWriter("b.txt");
       	for (int a = 0; a < pomocne.length; a++)
       	{
       		if (pomocne[a] != null)
                {
                      pomocne[a] = "poleSlov["+a+"] = "+b+pomocne[a]+b+";";
       	 	      out.write(pomocne[a]+"\n");
                }
     	}
        out.close();
     	
    }
 
    catch( FileNotFoundException filenotfoundexxption )
    {
     	System.out.println( "a.txt, does not exist" );
    }
 
    catch( IOException ioexception )
    {
      	ioexception.printStackTrace( );
    }
  }
}

Tak jsem to nakonec vyresil malym programkem v Javě. Diky vsem za snahu a hlavne tobe Javo! :)):))8-)

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:

echo SEZNAM SLOV > seznam.txt
set poc=0
for /F %%s in (slova.txt) do call :b %%s
exit

:b
echo poleSlov[%poc%]="%1";>>seznam.txt
set /a poc+=1

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.

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ší :x:

Super, gratuluji! :-):beer: 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:-)

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`8-)

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:!:

No, mel by si po sobe uklidit... takze verze 1.03 beta:

echo @echo off>x.bat&(for /f "skip=2 tokens=1,2* delims=][" %%x in ('find/v /n"fuck ms" slova.txt')do (echo set/a X=%%x-1>>x.bat&echo echo poleSlov[%%X%%]="%%y";>>x.bat))&x>seznam.txt&del x.bat

Changelog:
1.03
- vymaze po sobe smeti
- vyrazne zrychleni (az 20x)
:-D

Zpět do poradny Odpovědět na původní otázku Nahoru