|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
[JAVA] Modifica file di testo
Salve,
ho un quesito relativamente semplice da porvi. Ho in input un file, solitamente html, devo rimuovere determinate righe, delle quali non conosco il numero ma solo che contengono determinati tag. Mi spiego meglio: solitamente in una pagina html si trova ad es. html+javascript, devo rimuovere le righe contententi codice js tra tag <script></script>. Come posso fare? grazie |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Tutto quello che trovi quando il flag è attivo, lo ignori. Il resto lo scrivi dove ti serve (es. su un altro file). Spero di essermi spiegato a parole. Non dovrebbe essere difficile da codificare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Un'altra idea potrebbe essere quella di caricare tutto il file in una stringa, per esempio di nome testo e poi scrivere
testo = testo.replaceAll ("<script>.*<\\/script>", ""); In testo avrai il codice senza i tag in questione. High Flying Sottovento
__________________
In God we trust; all others bring data |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
ho parzialmente risolto usando replace, se non fosse che dà problemi.. es: <SCRIPT> <!-- function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } </SCRIPT> testo = testo.replaceAll ("<SCRIPT>.*<\\/SCRIPT>", ""); non funziona.. Ultima modifica di DarkSiDE : 09-08-2006 alle 20:48. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 365
|
io quoto al 100% la soluzione di andbin, molto C-style
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Mi permetto di suggerire una variante: se il file di testo è xhtml potresti semplicemente utilizzare un parser con un apposito file xsl per trasformare il sorgente con gli script in un nuovo file senza script.
Però non so se questo sia il tuo caso.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 365
|
bella anche questa soluzione..
però non dimentichiamo che XSL (eXtesible Style Language) sarebbe nato per applicare stili a pagine Xml o XHtml.. che poi sia un linguaggio potentissmo è vero, però ci si scosta un po' dalla natura del linguaggio.. un'altra cosetta..se lo conosce, benissimo, altrimenti forse non è proprio il linguaggio più facile da imparare così in quattro e qattr'otto spero che almeno gli piaccia la ricorsione.. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
nessuno? grazie per i consigli ma se riuscissi a far funzionare replace all sarebbe sicuramente molto più comodo e sicuro |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
import java.util.regex.*;
public class Prova
{
public static void main (String[] args)
{
try
{
String page = "<html>\r\n" +
"<head>\r\n" +
"<title>Prova</title>\r\n" +
"<script type=\"text/javascript\">\r\n" +
"<!--\r\n" +
"alert (\"Ciao\");\r\n" +
"//-->\r\n" +
"</script>\r\n" +
"</head>\r\n" +
"<body>\r\n" +
"\r\n" +
"<h1>Ciao</h1>\r\n" +
"<SCRIPT TYPE=\"text/javascript\">\r\n" +
"</SCRIPT>\r\n" +
"\r\n" +
"</body>\r\n" +
"</html>";
Pattern pattern = Pattern.compile ("<script.*?</script>(\r\n)?", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher (page);
String output = matcher.replaceAll ("");
System.out.println (output);
}
catch (Exception e)
{
e.printStackTrace ();
}
}
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
Sicuramente di gran lunga migliore la tua soluzione..perchè mi hai inizialmente consigliato di scrivere manualmente il codice? nondovrebbe essere più efficiente l'ultima soluzione proposta? grazie mille, davvero. |
|
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Facendo invece come avevo detto all'inizio, è vero che sarebbe stato un pochino più complesso analizzare ogni riga per trovare i vari delimitatori, ma così non occupavi troppa memoria. Insomma ... è una cosa da valutare. Se ti piace l'esempio che ho appena fatto, in linea di massima dovrebbe andarti bene (se non devi gestire pagine molto grosse). Dovresti solo leggere il file a blocchi di tot caratteri e metterli direttamente in uno StringBuffer (per motivi di prestazioni). Poi alla fine ottieni una String su cui operare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
Per quanto riguarda la stringa che conterrà il codice, vale la pena utilizzare una StringBuffer sapendo che utilizzerò SOLO l'append per copiare le singole righe? |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Anzi, ti dico di più: non dovresti nemmeno leggere riga per riga (ad esempio con readLine() della classe BufferedReader) perché così perderesti i fine riga. È molto meglio leggere a blocchi di char che, tra l'altro, è anche più performante!! Codice:
BufferedReader br = ......; char[] cbuf = new char[1024]; .... int len = br.read (cbuf, 0, cbuf.length); // ripetuto in loop, ovviamente ....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
Codice:
char[] cbuf = new char[1024];
StringBuffer testo=new StringBuffer();
while(br.read (cbuf, 0, cbuf.length)!=-1) {
br.read (cbuf, 0, cbuf.length);
testo.append(cbuf);
}
br.close();
Ultima modifica di DarkSiDE : 12-08-2006 alle 20:58. |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
FileInputStream fis = new FileInputStream ("nomefile");
InputStreamReader isr = new InputStreamReader (fis);
int len;
char[] chbuf = new char[1024];
StringBuffer strbuf = new StringBuffer ();
do {
len = isr.read (chbuf, 0, chbuf.length);
if (len > 0) {
strbuf.append (chbuf, 0, len);
}
} while (len > 0);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:03.



















