Newsgroup: it.comp.lang.perl
Titolo: Cancellare una stringa

Ciao a tutti, č da poco che mi sono avvicinato al Perl e forse il mio
problema č banale ma non riesco a risolverlo.
Il fatto č questo, nel file batch "vedi.bat" il comando Find restituisce il
file outfind.txt che viene passato al file perl "
delpath.pl
" che provvede a
cancellare una stringa predefenita
while (<>) {
 s/C:\\Documents and Settings\\utente\\Documenti\\Musica\\//g;
 s/%*//g;
 print;
}
La prima sostituzione funziona, la seconda no perchč  "%*" rappresenta i
parametri che vengono passati al batch dalla riga di comando e che il Perl
interpreta come letterali.
Ora il punto č: come far leggere al Perl il valore di %*?
potrei usare il comando batch Echo %* > "parametri.txt" e ottenere i
parametri scritti nel file "parametri.txt".
anchecosě perň non saprei come fare per passare i valori di %* a  s/%*//g;
Spero di essere stato chiaro.

 Spero di essere stato chiaro.
Non voglio dire che tu non lo sia stato, ma non ho comunque capito il
tuo problema. Potresti riportare quantomeno la riga del file batch
dove viene richiamato lo script Perl, insieme all'indicazione di
*cosa* vuoi fare esattamente? Senza tutta quella roba %* il tuo script
già cancella quella stringa dalle righe dei file in ingresso.
Posso però provare a dare un'interpretazione. Tu vuoi passare allo
script una serie di altre stringhe da cancellare, stringhe che il tuo
batch riceve dall'esterno e che sono disponibili nel batch stesso come
%1, %2, ecc., ossia in %*. Non ti rimane che passare il tutto allo
script, ma assicurandoti di lavorare solo sul primo file:
   % nel file vedi.bat, e sperando che %* faccia quello che penso
   perl \path\to\
delpath.pl
 nomefile.txt %*
   # nel file 
delpath.pl
   # NOTA: non testato
   my @stringhe = splice @ARGV, 1; # rimuove tutti gli argomenti
eccetto il primo
   while (<>) {
      s/C:\\Documents and Settings\\utente\\Documenti\\Musica\\//g;
      for my $stringa (@stringhe) {
         $stringa = quotemeta $stringa; # protegge i caratteri
"speciali"
         s/$stringa//g;
      }
   }
Ciao,
   Flavio.

%1, %2, ecc., ossia in %*.
In pratica la cosa funziona cosě.
Al batch "vedi.bat" vengono passati alcuni parametri, ad esempio al prompt
digito
vedi Francesco De Gregori
find cerca i parametri in "MP3eWMA.txt" e scrive tutte le righe in cui li
trova in "oldAutore_Francesco De gregori.txt" che a sua volta viene passato
al file perl "
del_path.pl
" che mette in output Vedi_Francesc De Gregori.txt.
find "%*" < MP3eWMA.txt > oldAutore_"%*".txt
perl 
del_path.pl
 oldAutore_"%*".txt > Vedi_"%*".txt
del_path.pl
 cancella dal file "oldAutore_%*.txt" la stringa predefinita
"C:\Documents and Settings\\utente\Documenti\\Musica\"
e poi vorrei che cancellasse anche i parametri che vengono passati al batch,
cioč Francesco De Gregori.
Come dicevo nel post precedente, la prima sostituzione funziona la seconda
no.
while (<>) {
 s/C:\\Documents and Settings\\utente\\Documenti\\Musica\\//g;
 s/%*//g;
 print;
}
In sostanza, ho un file di testo con i path completi dei file musicali dai 
quali vorrei cancellare tutto escluso il titolo.
Il percorso della cartella Musica non cambia, quello che cambia sono 
ovviamente i parametri del batch.
Ciao, e grazie per la risposta.
Febo