Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179

    [java]matcher:"tagliare" il group()

    dopo aver fatto la ricerca all'interno di un file, come posso tagliare il risultato di tale ricerca e metterlo in un altro file?
    cioè tutto ciò che trovo in un file ad ex, all'interno di titolo, devo tagliarlo e metterlo in un altro file... mi dareste qlc info su come fare?
    grazie.... (se possibile, un esempio è molto gradito... grazie!!!)

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'unico modo che hai per "tagliare" dei dati da un file è quello di riscrivere il file senza quei dati.

    Quindi, leggi il file, lo memorizzi da qualche parte (Vector, ArrayList, altre classi...) e lo riscrivi tralasciando la parte che deve essere tagliata.

    Quest'ultima la metti nel tuo nuovo file.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    lele io mantengo il contenuto del file all'interno di una variabile...
    codice:
    String fileRead = "c:/Ingegneria/mysql/temp/pagina.html"; //inserisci il path della pagina
    	    String fileWrite = "c:/Ingegneria/mysql/temp/script_JAVAout.txt"; //Nome File Output
                String testoPagina = readFile(fileRead);                
                Pattern  pattern = Pattern.compile ("<SCRIPT.*?>(.*?)/SCRIPT>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher (testoPagina);
                StringBuffer stringBuffer = new StringBuffer();
                int scriptNumber = 0;
                while (matcher.find ())
                {
                	scriptNumber++;
                    String script = matcher.group (0);     
                    StringBuffer scriptText = new StringBuffer();
                    scriptText.append("SCRIPT " + scriptNumber + ":\r\n ");
                    scriptText.append(script); 
                    scriptText.append("\r\n");
                    stringBuffer.append(scriptText);
                    System.out.println (scriptText);
                }
                if (stringBuffer.length() != 0)
                {
                	stringBuffer.append(scriptNumber +  " Script Trovati in " + fileRead);
                	writeFile(stringBuffer.toString(), fileWrite);
                	System.out.println (scriptNumber +  " Script Trovati in " + fileRead);
                }else
                {
                	stringBuffer.append("NON CI SONO JAVASCRIPT o VBSCRIPT IN " + fileRead);
                	writeFile(stringBuffer.toString(), fileWrite);
                	System.out.println ("NON CI SONO JAVASCRIPT o VBSCRIPT IN " + fileRead);
                }
    ad esempio in questo caso io ricerco gli script e li metto nel file script_JAVAout.txt
    come faccio a copiare allora l'intero file senza gli script trovati?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java]matcher:"tagliare" il group()

    Originariamente inviato da nikynik
    dopo aver fatto la ricerca all'interno di un file, come posso tagliare il risultato di tale ricerca e metterlo in un altro file?
    cioè tutto ciò che trovo in un file ad ex, all'interno di titolo, devo tagliarlo e metterlo in un altro file... mi dareste qlc info su come fare?
    grazie.... (se possibile, un esempio è molto gradito... grazie!!!)
    Cioè, fammi capire: tu vuoi scrivere un file che contiene tutto ciò che non è stato "matchato"?? In pratica tutto il file originale senza le parti trovate.
    Giusto?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    no... leleFT mi ha detto che l'unico modo per "tagliare" le regex macciate (passami il termine!) è ricopiare il file senza quello che ha trovato...
    cmq il mio obiettivo è eliminare dalla pagina gli script trovati e metterli in un altro file.
    alla fine in pratica devo ottenere una nuova pagina htm che non contiene più gli script ma il collegamento al file che li contiene
    questa cosa la vedrò poi.. per ora mi sto preoccupando di come "tagliare" lo/gli script dalla pagina....
    spero di essermi spiegato!
    grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ok, allora vuoi proprio prendere tutto ciò che non è stato trovato.

    Non è difficile. Se vai a vedere, la classe Matcher ha dei metodi start() e end() che permettono di sapere l'offset di inizio/fine di ciò che è stato "matchato".

    Bene! Tu hai una stringa che contiene tutto il file.

    codice:
    +--------------------------------------------
    | ~ ~ ~ ~ ~ | match | ~ ~ ~ | match | ~ ~ ~ ~ ...  resto della stringa
    +--------------------------------------------
    ^            ^     ^ 
    0          start  end
    Metti inizialmente a 0 una variabile che possiamo chiamare 'from'. Quando trovi un match, scrivi sul file una substring della stringa da from a start. Poi metti from=end+1 e continui.
    Alla fine nel file hai tutto tranne i match.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    MA IN QUESTO CASO CHE FINE FANNO I PEZZI CHE NON HO PRESO?
    cioè... alla fine ottengo un file che contiene tutto....tranne il group ricercato....e si qui ci siamo, ma ora dovrei sapere quali sono state le righe non prese perchè li devo mettere in un ltro file...
    in pratica nel modo che mi hai suggerito di fare(che trall'altro nn è chiaro per me!!!), ho in memoria cmq gli script "tagliati"?, o no?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nikynik
    MA IN QUESTO CASO CHE FINE FANNO I PEZZI CHE NON HO PRESO?
    cioè... alla fine ottengo un file che contiene tutto....tranne il group ricercato....e si qui ci siamo, ma ora dovrei sapere quali sono state le righe non prese perchè li devo mettere in un ltro file...
    in pratica nel modo che mi hai suggerito di fare(che trall'altro nn è chiaro per me!!!), ho in memoria cmq gli script "tagliati"?, o no?
    Allora ripeto. Tu hai una stringa che contiene tutto il testo del file, ok?
    Usando Matcher puoi sapere l'offset di inizio/fine del match. Grazie a queste informazioni puoi estrarre dalla stringa delle sottostringhe con le parti non matchate. Poi cosa ne fai di queste sottostringhe, dipende da te. Puoi scriverle su un file o quello che vuoi.

    Riguarda il mio schemino che ho fatto. Se il primo match per esempio ha inizio all'offset 100, tu fai una substring (metodo substring() di String) per prendere da 0 a 99.
    Come ho detto, conviene ovviamente avere una variabile es. 'from' che contiene l'inizio da prendere.

    Rileggi bene la fine del mio precedente post.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.