PDA

View Full Version : [VBS / BATCH] Formattare testo


Gentoooo
22-03-2008, 11:07
Ciao a tutti ...
Vorrei sapere se esiste un modo (immagino di si solo che non riesco a capire come) per formattare un file di testo con una logica precisa.

Mi spiego meglio, io ho un file di testo del tipo:

FAILED STRINGACHEMISERVE 123456 78979 4656666

Da cui vorrei eliminare tutto tranne appunto "STRINGACHEMISERVE" . Il file è sempre di questo formato, l'unica cosa che cambiano sono i numeri perchè sono numeri progressivi che cambiano di volta in volta.
Cmq si può dire che a me basterebbe eliminare tutto ciò che c'è prima del primo spazio e tutto ciò che c'è dopo il secondo spazio in modo da avere sempre e solo la parte che mi interessa.

Spero di essere stato abbastanza chiaro. Se ci son problemi fatemi sapere che cercherò di essere più esaustivo!

Grazie a tutti anticipatamente.

stdecden
22-03-2008, 12:12
Prova a dare un occhiata qui:
http://www.devguru.com/Technologies/vbscript/QuickRef/split.html:read:

Gentoooo
01-04-2008, 10:39
Ho provato a capire e seguire la guida ma con scarsissimo risultato...

Nessuno ha qualche idea su come fare??

Spiego meglio il problema:

Ricevo un file .txt scritto nel seguente formato:

Running PROCEDURA1 10026547 86541 543435
Running PROCEDURA2 10026544 86542 543436
Running PROCEDURA3 10026599 86543 543437

A questo punto avrei bisogno di uno script che vada a leggere questo file e mi elimini tutto ciò che non è "PROCEDURA...X" salvandomi un nuovo file o anche sovrascrivendo in modo corretto lo stesso.

Se vi può essere utile Running è l'unica parte sempre lunga uguale , mentre i nomi delle procedure ed i numeri che seguono sono sempre diversi (pur mantenendo sempre la stessa posizione)


...Grazie!!!!!!! :confused: :confused: :confused: :confused: :confused:

john_revelator
02-04-2008, 00:43
Ti consiglierei di installare la powershell. Una volta installata, da esegui la richiami digitando powershell e ti muovi come col normale prompt dei comandi fino a raggiungere la cartella che contiene il file.

A questo punto ti basta digitare

gc nome_tuo_file.txt | % {$_.split(" ")[1]}

ed ottieni solo l'elenco delle procedure. In pratica usi lo spazio come separatore per crearti un array e richiami l'elemento in posizione 1 (cioè il secondo elemento).

Nel caso voglia generare un nuovo file di testo basta che redirezioni l'output.

gc nome_tuo_file.txt | % {$_.split(" ")[1]} > nuovo.txt

Spero di esserti stato utile. :)

Gentoooo
02-04-2008, 07:59
Grazie 1000 sei stato gentilissimo! Il tuo script funziona alla perfezione ma ho un ultimo "problemino" ... ho notato infatti che quando ricevo questo file gli spazi tra una parola non sono formattati correttamente!

Non capisco il perchè ma ti faccio un esempio...

Ho il file così:

Running procedura1 123 1415 66 777
Running procedura2 123 1415 66 778

Se lancio lo script così , non funziona...

Se invece da notepad o ultraedit mi posiziono davanti a procedura1 con il cursore, cancello lo spazio (che comunque è solo uno) e lo ricreo (click su barra spaziatrice) allora funziona tutto alla perfezione! (stessa cosa con i numeri che seguono)

A questo punto, ti/vi chiedo se esiste un altro script in grado di formattare meglio il testo, eliminando eventuali spazi di troppo o comunque ricreando gli spazi in un formato "standard"


Grazie ancora ... :confused:

banryu79
02-04-2008, 10:25
Ho il file così:

Running procedura1 123 1415 66 777
Running procedura2 123 1415 66 778

Se lancio lo script così , non funziona...

Se invece da notepad o ultraedit mi posiziono davanti a procedura1 con il cursore, cancello lo spazio (che comunque è solo uno) e lo ricreo (click su barra spaziatrice) allora funziona tutto alla perfezione! (stessa cosa con i numeri che seguono)


Prova ad aprire il file con un editor di testo e a visualizzare tutti i caratteri, anche quelli di spaziatura (dovrebbe esserci un'opzione apposita): potrebbe darsi che dove tu pensi ci sia uno spazio [" "] ci sia invece una tabulazione ["\t"].

Lo script cerca lo spazio come separatore, e se non c'è veramente un carattere di spazio... picche! :D

john_revelator
02-04-2008, 15:10
Grazie 1000 sei stato gentilissimo! Il tuo script funziona alla perfezione ma ho un ultimo "problemino" ... ho notato infatti che quando ricevo questo file gli spazi tra una parola non sono formattati correttamente!

Non capisco il perchè ma ti faccio un esempio...

Ho il file così:

Running procedura1 123 1415 66 777
Running procedura2 123 1415 66 778

Se lancio lo script così , non funziona...

Se invece da notepad o ultraedit mi posiziono davanti a procedura1 con il cursore, cancello lo spazio (che comunque è solo uno) e lo ricreo (click su barra spaziatrice) allora funziona tutto alla perfezione! (stessa cosa con i numeri che seguono)

A questo punto, ti/vi chiedo se esiste un altro script in grado di formattare meglio il testo, eliminando eventuali spazi di troppo o comunque ricreando gli spazi in un formato "standard"


Grazie ancora ... :confused:


Ciao. Cosa intendi per non funziona? Ho fatto una prova inserendo vari spazi e tabulazioni e con questo codice sembra funzionare tutto bene.

gc tuo_file.txt | % {$_ -replace "\t+|\s+"," "} | % {$_.split(" ")[1]}

Facci sapere

Gentoooo
03-04-2008, 08:09
6 un grande!!

Funziona pefettamente :D :D :D

Mi puoi solo spiegare meglio lo scritp ?

gc tuo_file.txt | % {$_ -replace "\t+|\s+"," "} | % {$_.split(" ")[1]}

Praticamente gli dici replace tutte le tabulazioni (\t) e tutti gli spazi (\s) in eccesso ?

Sto cercando di entrare adesso nel "mondo" della powershell e ancora non ci capisco gran chè!

thxxxx

PS: ho provato a fare un file .bat con il comando di cui sopra ma il batch non va... Con la powershell funziona in modo diverso ?

john_revelator
03-04-2008, 09:42
6 un grande!!

Funziona pefettamente :D :D :D

Mi puoi solo spiegare meglio lo scritp ?

gc tuo_file.txt | % {$_ -replace "\t+|\s+"," "} | % {$_.split(" ")[1]}

Praticamente gli dici replace tutte le tabulazioni (\t) e tutti gli spazi (\s) in eccesso ?

Sto cercando di entrare adesso nel "mondo" della powershell e ancora non ci capisco gran chè!

thxxxx

PS: ho provato a fare un file .bat con il comando di cui sopra ma il batch non va... Con la powershell funziona in modo diverso ?

Ti spiego rapidamente lo script.

gc è un alias di get-content e serve per vedere il contenuto del file.
Tramite la pipe (|) il comando get-content viene passato all'istruzione successiva. Il simbolo di % è la forma contratta del cmdlet foreach-object e serve per ciclare ciascuna riga del file. $_ indica l'oggetto corrente (in questo caso quindi la riga in esame) alla quale si applica il replace di una o più occorrenze del carattere di tabulazione e del carattere spazio con un singolo spazio. Tramite la pipe successiva, una volta effettuata la sostituzione, si cicla ancora il file modificato e si "splitta" il contenuto in base al carattere spazio recuperando il secondo elemento dell'array.

Per quanto riguarda il batch ricordo di aver letto che fosse possibile richiamare la powershell anche tramite file .bat ma non ricordo come. (Sono agli inizi anch'io con questo bel giocattolino :D ).
Prova a fare una ricerca su google, magari quando ho un attimo di tempo lo faccio anch'io. :)

Gentoooo
03-04-2008, 14:10
Perfetto mi è tutto MOOOLTO più chiaro!
Mi sono scaricato il manuale e la powergui e sto cercando di capirne sempre di più..

grazie ancora so su chi poter contare nel caso avessi ancora bisogno :)


ciao