Pagina 1 di 1

Cerca testo in file .txt

Inviato: mer apr 22, 2015 10:19 am
da SerioBg
Ho bisogno di estrarre da grossi file txt la seguente sequenza : "parola:parola"; praticamente le voci unite fra loro dai due punti.
Sapete se è possibile e come si fa ? Possibilmente se fosse possibile anche modificando la sequenza.

Grazie


:bam

Re: Cerca testo in file .txt

Inviato: mer apr 22, 2015 11:31 am
da Al3x
estrarre per farne cosa? E' importante sapere dove finisce l'output per dare qualche indicazione più precisa ;)

Re: Cerca testo in file .txt

Inviato: mer apr 22, 2015 12:16 pm
da SerioBg
Per fare un elenco in un altro file di testo

Re: Cerca testo in file .txt

Inviato: mer apr 22, 2015 1:57 pm
da Al3x
presumo che con vbscript sia possibile realizzare facilmente uno script che svolga questa operazione. Vediamo se qualcuno sa come procedere

Re: Cerca testo in file .txt

Inviato: mer apr 22, 2015 10:46 pm
da PippoDJ
Al3x ha scritto:presumo che con vbscript sia possibile realizzare facilmente uno script che svolga questa operazione. Vediamo se qualcuno sa come procedere
Challenge accepted! :)

senzasoldi.vbs:

Codice: Seleziona tutto

ESPRESSIONEREGOLARE = "[a-z]+:[a-z]+"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TF = FSO.OpenTextFile("input.txt", 1)
TESTOIN = TF.ReadAll
TF.Close
Set RE = CreateObject("VBScript.RegExp")
RE.Global = True
RE.IgnoreCase = True   
RE.Pattern = ESPRESSIONEREGOLARE
Set RISULTATI = RE.Execute(TESTOIN)  
If RISULTATI.Count > 0 Then
   Set TF = FSO.OpenTextFile("output.txt", 2, True)
   For Each RISULTATO in RISULTATI
      TF.WriteLine(RISULTATO.Value)   
   Next
   TF.Close
   Wscript.Echo "Operazione completata."
Else
   Wscript.Echo "Espressione non trovata."
End If
Per semplicità il file di testo in ingresso deve chiamarsi input.txt e si deve trovare nella stessa cartella dello script VBS che, al termine dell'estrazione, scriverà il file output.txt contenente i risultati.

Il cuore del programma è tutto nella espressione regolare definita nella prima riga: modificandola opportunamente, si potrà usare lo stesso codice per altri scopi. Ad esempio: se le parole da cercare contengono anche caratteri numerici, basterà sostituire la prima riga con:
ESPRESSIONEREGOLARE = "[a-z0-9]+:[a-z0-9]+"

Ciao, Pippo.

Re: Cerca testo in file .txt

Inviato: gio apr 23, 2015 11:47 am
da SerioBg
Molte grazie, mi sembra che funzioni. Desideravo sapere come posso inserire, oltre a lettere e numeri, eventuali caratteri particolari tipo "!;@./"nell'espressioneregolare al fine di raffinare la ricerca.

Grazie

Re: Cerca testo in file .txt

Inviato: gio apr 23, 2015 1:07 pm
da PippoDJ
senzasoldi ha scritto:Desideravo sapere come posso inserire, oltre a lettere e numeri, eventuali caratteri particolari tipo "!;@./"nell'espressioneregolare al fine di raffinare la ricerca.
Vanno aggiunti, uno per uno, nelle espressioni comprese tra parentesi quadre. Usando come esempio i 5 caratteri "!;@./" che hai indicato diventerebbe:
ESPRESSIONEREGOLARE = "[a-z0-9!;@./]+:[a-z0-9!;@./]+"

Tieni presente che i caratteri "\", "^" e "-" hanno un significato speciale nelle espressioni regolari e, pertanto, vanno preceduti dal carattere di escape: "\\", "\^" e "\-":
ESPRESSIONEREGOLARE = "[a-z0-9\\\^\-]+:[a-z0-9\\\^\-]+"

A questo punto, se le coppie di parole sono separate solo da spazi, forse diventa più semplice usare un approccio "inverso":
ESPRESSIONEREGOLARE = "[^ \r\n]+:[^ \r\n]+"
che, in pratica, rileva qualsiasi carattere a parte gli spazi e gli "a capo".

Ciao, Pippo.

Re: Cerca testo in file .txt

Inviato: ven apr 24, 2015 10:37 am
da SerioBg
Ho fatto come hai indicato, ma non ho ottenuto quanto speravo, perchè scrivendo " "[a-z0-9!]+:[a-z0-9!]+" pensavo di selezionare solo ed unicamente tutte le espressioni contenenti anche il punto esclamativo. Invece mi estrae tutte le espressioni con lettere, tutte le espressioni con lettere e numero e tutte le espressioni con lettere,numeri, e punto esclamativo.
Cosa devo scrivere per ottenere il risultato che interessa?


Grazie

N.B: non mandarmi a quel paese!!!

Re: Cerca testo in file .txt

Inviato: ven apr 24, 2015 3:50 pm
da PippoDJ
senzasoldi ha scritto:Ho fatto come hai indicato, ma non ho ottenuto quanto speravo, perchè scrivendo " "[a-z0-9!]+:[a-z0-9!]+" pensavo di selezionare solo ed unicamente tutte le espressioni contenenti anche il punto esclamativo. Invece mi estrae tutte le espressioni con lettere, tutte le espressioni con lettere e numero e tutte le espressioni con lettere,numeri, e punto esclamativo.
Cosa devo scrivere per ottenere il risultato che interessa?
Oops... sorry: avevo interpretato male la tua richiesta. La faccenda si complica un po'...

Per estrarre le espressioni che contengono "!" in entrambe le parole ai lati dei ":":
ESPRESSIONEREGOLARE = "[^\s]*!+[^\s]*:[^\s]*!+[^\s]*"

Per estrarre le espressioni che contengono "!" anche solo in una delle due parole ai lati dei ":":
ESPRESSIONEREGOLARE = "[^\s]*!+[^\s]*:[^\s]+|[^\s]+:[^\s]*!+[^\s]*"
N.B: non mandarmi a quel paese!!!
Certo che no... però adesso mi serve qualcosa che faccia passare il mal di testa. xP ;)

Re: Cerca testo in file .txt

Inviato: ven apr 24, 2015 5:17 pm
da SerioBg
Molte grazie. Tutto a posto


:grazie

Re: Cerca testo in file .txt

Inviato: dom dic 18, 2016 12:15 pm
da SerioBg
Rispolvero una vecchia discussione : alle espressioni sopra indicate è possibile aggiungere la condizione: se nella riga sotto compare la parola "IT" ?

Grazie

:clap

Re: Cerca testo in file .txt

Inviato: lun dic 19, 2016 12:36 pm
da PippoDJ
senzasoldi ha scritto:se nella riga sotto compare la parola "IT" ?
Per essere sicuro di capire bene cosa ti serve, potresti inserire qualche riga come esempio del testo in ingresso in un tag "Code" e il corrispondente output che ti aspetti di ottenere (sempre in un altro tag "Code")?

Re: Cerca testo in file .txt

Inviato: sab dic 24, 2016 11:51 am
da SerioBg
Scusa, ti rispondo come posso. Ho un file di testo così strutturato:

"Cliente : Barbarafitzpatrick .com:jcfpa475
Indirizzo mail : Nazionalità|US
Cliente : Cearius .com:kakashe
Indirizzo mail : Nazionalità|US
Cliente : Charottips .com:C17t07G96
Indirizzo mail : Nazionalità|PY
Cliente : CocoBean66 .com:raylin66
Indirizzo mail : Nazionalità|US"

e desidero ottenere :

"Barbarafitzpatrick .com:jcfpa475|US
Cearius .com:kakashe|US
CocoBean66 .com:raylin66|US"

Praticamente mail e nazionalità omogenea del cliente. (senza virgolette)


Spero di essere stato chiaro.

Grazie

Ho tolto gli indirizzi email, non è il caso di farli vedere così apertamente.
By crazy.cat

Re: Cerca testo in file .txt

Inviato: mer dic 28, 2016 6:01 pm
da PippoDJ
Potresti provare:
ESPRESSIONEREGOLARE = ".*\n.*\|US"

C'è però un accorgimento: visto che l'espressione deve trovare corrispondenza su più di una riga, è necessario aggiungere:
RE.MultiLine = True
...al codice VBS visto sopra (è questo che ha determinato un certo ritardo nella risposta :fiu ).

Per cui lo script modificato diventerebbe:

Codice: Seleziona tutto

ESPRESSIONEREGOLARE = ".*\n.*\|US"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TF = FSO.OpenTextFile("input.txt", 1)
TESTOIN = TF.ReadAll
TF.Close
Set RE = CreateObject("VBScript.RegExp")
RE.Global = True
RE.IgnoreCase = True   
RE.MultiLine = True
RE.Pattern = ESPRESSIONEREGOLARE
Set RISULTATI = RE.Execute(TESTOIN)  
If RISULTATI.Count > 0 Then
   Set TF = FSO.OpenTextFile("output.txt", 2, True)
   For Each RISULTATO in RISULTATI
      TF.WriteLine(RISULTATO.Value)   
   Next
   TF.Close
   Wscript.Echo "Operazione completata."
Else
   Wscript.Echo "Espressione non trovata."
End If

Re: Cerca testo in file .txt

Inviato: ven dic 30, 2016 11:22 pm
da SerioBg
Molte grazie; Così può andare.