spina ha scritto:Ok, codice numerico. Quindi ti interessa anche verificare che il totale tra cifre e spazi sia 15?
Emanuele
esatto
Moderatore: Staff
spina ha scritto:Ok, codice numerico. Quindi ti interessa anche verificare che il totale tra cifre e spazi sia 15?
Emanuele

_NYTRO_ ha scritto:Scusa, allora non potresti tagliare a priori i primi 15 caratteri di ogni riga in modo da eseguire i controlli solo su quelli?


tgmx ha scritto:_NYTRO_ ha scritto:Scusa, allora non potresti tagliare a priori i primi 15 caratteri di ogni riga in modo da eseguire i controlli solo su quelli?
potrei ma dici che mi agevolerebbe?
E poi se possibile vorrei rdurre al minimo le elaborazioni su ogni stringa dato che il programma ne deve controllare tante.



_NYTRO_ ha scritto:Scusa, ma per fare meno "caciara" non puoi restringere il tutto ai primi 15 caratteri?!
Tagliati i restanti 185, quali sono i possibili codici "buoni"?
- può iniziare con un carattere NON numerico?

masalapianta ha scritto:se i caratteri utili son sempre i primi 15 (esclusi gli spazi) non e' chiaro perche' tu voglia usare una regexp, prendi i primi 15 caratteri e gli togli gli spazi finali:
echo "$stringa"|cut -b 1-15|awk '{print $1}'
il parsing con le regexp hanno un peso computazionale non indifferente, non ha senso usarle quando se ne puo' fare a meno.

tgmx ha scritto:no, il codice è costituito da cifre, deve iniziare con una cifra, può essere lungo minimo 7 massimo 15 caratteri e i caratteri restanti devono essere tutti spazi.
'^[[:digit:]]\{7,15\}[[:space:]]\{0,8\}'
spina ha scritto:tgmx ha scritto:no, il codice è costituito da cifre, deve iniziare con una cifra, può essere lungo minimo 7 massimo 15 caratteri e i caratteri restanti devono essere tutti spazi.
Allora quello che fa per te è questa RE (quote a parte):
- Codice: Seleziona tutto
'^[[:digit:]]\{7,15\}[[:space:]]\{0,8\}'
Emanuele

tgmx ha scritto:...così accetterebbe anche i codici di 6 cifre seguiti da 2 spazi solamente... sbaglio? Non terrei conto che il totale deve essere 15.

spina ha scritto:L'espressione regolare accetta solo tutto ciò che inizia con almeno 7 e al più 15 cifre, seguite da 0 o al più 8 spazi. Il problema è la conta totale dei caratteri. Ovviamente accetta anche stringhe che iniziano con 15 cifre seguite da 8 spazi.
Emanuele
([0-9]{7,}[\\ ]{0,}){15}



. E' strano che non funga, anche io stavo provando qualcosa del genere.
tgmx ha scritto:masalapianta ha scritto:se i caratteri utili son sempre i primi 15 (esclusi gli spazi) non e' chiaro perche' tu voglia usare una regexp, prendi i primi 15 caratteri e gli togli gli spazi finali:
echo "$stringa"|cut -b 1-15|awk '{print $1}'
il parsing con le regexp hanno un peso computazionale non indifferente, non ha senso usarle quando se ne puo' fare a meno.
Anche questa è una possibilità
ma con l'occasione volevo imparare qualcosa di più sulle espressioni regolare.
Tra l'altro non è escluso che in futuro debba controllare anche la forma di quello che segue quindi se riuscivo ad impostare correttamente
un'espressione regolare mi trovavo pronto ad aggiungere controlli.
(no, l'indicativo imperfetto non e' la stessa cosa
)
spina ha scritto:Haha, quindi siamo ritornati alla tua soluzione iniziale. E' strano che non funga, anche io stavo provando qualcosa del genere.
Emanuele

Visitano il forum: Nessuno e 1 ospite