Newsgroup: it.comp.programmare
Titolo: problema con le espressioni regolari

ciao a tutti,
avrei bisogno di un aiuto please:
dovrei estrarre da un file di testo solo le lettere maiuscole che non 
sono tra parentesi tonde o quadre e che non sono all' inizio della riga 
per poi aggiungerci uno spazio davanti e poi fare il contrario.
Separatamente quasi ci arrivo ma in una espressione sola proprio no.
Qualcuno può aiutarmi.
Un pezzo di testo di esempio è come questo:
%
(00)
(DATA: 11 GEN 07 - 13:43)
(TEMPO PREVISTO:0 MIN. 26 SEC.)
M98P9900
(T7 H7 = BAS.096)
(VAI AL BLOCCO)
GOTO #199
N1 (PASSATA DI FINITURA - ESTERNO)
(UT.T7 MOD.BAS.096)
M03
G00G90G40G43H7X0.Y344.Z100.V0M6T7S11000
M13
M38
G00X0.Y344.Z30.
G01G42D7Y343.F8000
Y342.
Z0.F1000
Y294.F6000
Y6.
G03X6.Y0.R6.
G01X294.
G03X300.Y6.R6.
G01Y294.
G03X294.Y300.R6.
G01X6.
G03X0.Y294.R6.
G02X-9.042Y265.321R50.
G00G90G40Z100.
M05
G40G0G91Y40.00
G53G49G90G00Z0M05
G52X0Y0Z0
M99
%
E' praticamente un file per macchine cnc che vorrei visualizzare su 
notepad++
Grazie infinte
Paolog

 per poi aggiungerci uno spazio davanti e poi fare il contrario.
Non sono sicuro di avere capito bene.
Quando dici di estrarre le lettere maiuscole non tra parentesi che cosa 
intendi esattamente?
Le parentesi bisogna supporle corrette o sono possibili anche righe
AAA(BB(C)D(
Prova a fare un esempio con una riga di input del tuo file e che cosa 
vorresti ottenere in output

 vorresti ottenere in output
Le parentesi si possono supporre corrette: quelle tonde contengono solo 
commenti, sono comunque solo in una riga e si chiudono sempre sulla 
stessa riga.
le quadre possono contenere operazioni o parametri, possono essere 
annidate e sono anche questo solo in una riga :
X[#500+10]
#100=[[#101+20]/2]-#12
Per quanto mi riguarda possono essere considerate alla stregua dei 
commenti perchè comunque non possono contenere lettere [A-Z].
Le lettere sono comunque singole: non esistono cose come AA BB CCC
Una 'parola' è formata sempre  da una lettera ed un valore: X-10 A20; il 
valore non è necessariamente un numero: può essere un parametro tipo 
#100 o una somma di valori che sono comunque tra parentesi quadre tipo 
[10+6] oppure [#500+20].
Ci possono anche essere righe di questo genere:
IF[#579EQ0]GOTO1
però non le ho tenute in considerazione.
Le parole chiave tipo IF DO END GOTO THEN ecc. difficilmente vengono 
usate su un percorso utensile e poi credo mi sarei complicato la vita 
tantissimo.
per fare un esempio, una riga tipo:
(COMMENTO DI PROVA)
G53G90G64G0X0Y0V0M68
X[10+2]Y[#500-1]
vorrei ottenere:
(COMMENTO DI PROVA)
G53 G90 G64 G0 X0 Y0 V0 M68
X[10+2] Y[#500-1]
cioè aggiungere uno spazio davanti alla lettera, in modo da separare le 
parole ed eventualmente riportare poi tutto come prima.
Più o meno è tutto qui :)
Paolog

 Più o meno è tutto qui :)
Quindi ricapitolando:
- ignorare tutto cio' che sta tra parentesi tonde
- inserire uno spazio davanti ad ogni gruppo di lettere maiuscole
consecutive eventualmente seguite da 0 o piu' numeri, tranne che per
l'inizio riga.
Piu' tardi provo a vedere che cosa ne esce col sed.
Se funziona ti posto la RE.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
Grazie mille
Paolog