Hromadne nahrazovani velka na mala - jak optimalizovat

Ivo Panacek ivop na regionet.cz
Úterý Duben 1 13:55:47 CEST 2003


On Út, 2003-04-01 at 13:32, Miroslav BENES wrote:
> Preji krasny den !
> 
> 
> Mam problem - potrebuji zoptimalizovat hromadne nahrazovani 
> textu. Jde o zdrojaky, ve kterych se vyskytuji odkazy na jine 
> soubory (zxdrojaky nebo spustitelne moduly). V soucasne dobe to 
> jede an DOSu a predelavam to do linuxu. 
> Krome os-depend volani je jeste problem s nazvy souboru. Na DOSu 
> byly case-insensitive, takze se ve zdrojacich vyskytuje napr.:
> {K_DEFPAR.I}
> {K_DefPar.I}
> {K_Defpar.i}
> apod. 
> Vsechna jmena jsou ted malymi pismeny, ale potrebuju jeste ty 
> zdrojaky projit a vsude to opravit. Protoze nevim na ktera jmena 
> souboru je nekde odkaz, udelal jsem si seznam vsech souboru a z 
> nich jsem vygeneroval nahrazovaci pravidla v teto podobe : 
> 
> ...
> | sed \
> ....
>   -e 's/[kK]\_[dD][eE][fF][pP][aA][Rr]\.[iI]/k\_devpar\.i/g' \
> ....
> 
> Takovych pravidel je cca 14500. Prikazu sed jsem musel pouzit 
> vicero, protoze vsechna nahrazeni najednou nebyl ochotny 
> spolknout. Problem je, ze nahrazovani trva velice dlouho - na 
> malem kousku (55 souboru, cca 150 kiB] to na P4/2GHz na 2.5GHz s 
> 512MB RAM a rychlymi disky trva skoro 5 minut.
> 
> 
> Je nejaka cesta jak to zoptimalizovat ? 
> Pripadne je neco vhodnejsiho na prevod na mala pismena ? Neco 
> jako "tr [:upper:] [:lower:]", ale aplikovane jen na vybrany 
> seznam slov ?

Rozhodne bych doporucil pouzit perl:

1) seznam souboru lze nasat do pameti (jedno velke pole)
   pro ucely nahrazovani (ono se do te pameti vejde dost)

2) u regularniho vyrazu v perlu muze byt
   parametr /i, ktery znamena case insensitive, cimz
   se to vyrazne zjednodusi

ivo




Další informace o konferenci Linux