Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker.
Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese. Grazie per il tuo "unblock"!
Se Windows genera un errore, hai un problema di virus o vuoi discutere/segnalare l'uscita della nuova versione di un software per la piattaforma Microsoft, questa è la sezione giusta.
Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker.
Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese. Grazie per il tuo "unblock"!
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.
Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker.
Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese. Grazie per il tuo "unblock"!
Al3x ha scritto:presumo che con vbscript sia possibile realizzare facilmente uno script che svolga questa operazione. Vediamo se qualcuno sa come procedere
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]+"
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.
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".
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?
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.
Rispolvero una vecchia discussione : alle espressioni sopra indicate è possibile aggiungere la condizione: se nella riga sotto compare la parola "IT" ?
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")?
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 ).
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
Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker.
Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese. Grazie per il tuo "unblock"!
Per favore, aggiungi TurboLab.it alle eccezioni del tuo Ad Blocker.
Siamo un progetto no-profit, e la pubblicità è indispensabile per pagare le spese. Grazie per il tuo "unblock"!
Inserendo un messaggio, dichiari di aver letto e accettato il regolamento di partecipazione.
Nello specifico, sei consapevole che ti stai assumendo personalmente la totale responsabilità delle tue affermazioni, anche in sede civile e/o penale,
manlevando i gestori di questo sito da ogni coinvolgimento e/o pretesa di rivalsa.
Dichiari inoltre di essere consapevole che il messaggio sarà visibile pubblicamente, accetti di diffonderlo con licenza
CC BY-NC-SA 3.0 (con attribuzione a "TurboLab.it") e rinunci ad ogni forma di compensazione (economica o altro).
Rinunci inoltre esplicitamente a qualsiasi pretesa di cancellazione del messaggio.