nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Postato originariamente da fusebyte:
Grazie anche a te Nessuno, pero' nonostante provi e riprovi il risultato è, o il file output.txt vuoto o uguale all'input. |
Prego, però, se mostri il codice che dici di avere provato e riprovato, ti faccio vedere dove sbagli.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Codice sorgente - presumibilmente C# / VB.NET |
if (checkBox_Parse.Checked)
if (!string.IsNullOrEmpty(_line))
{
try
{
//string s = "";
int atpos = _line.LastIndexOf("@");
if (atpos>0)
{
int slpos = _line.IndexOf('/',atpos);
if (slpos>0)
_line = _line.Substring(slpos + 1, atpos - (slpos - 1));
break;
}
}
catch (Exception)
{
}
}
|
Eccolo, in questo modo mi da' l'output uguale all'input , quello che ti assicuro che tutto il file .txt ancora da filtrare è caricato dentro _line.
Il dubbio che mi pongo è che IndexOf e LastIndexOf lavorano sul carattere, mentre poi fra questi 2 caratteri
vengono dichiarati degli interi, forse per calcolare la lenght fra i 2 caratteri.
Boh, speriamo che riesci a trovare dove sbaglio.
Ti ringrazio
Ciao
Ultima modifica effettuata da fusebyte il 14/11/2012 alle 12:57 |
|
Renny (Normal User)
Expert
Messaggi: 231
Iscritto: 30/07/2011
|
Ciao.
Forse la mia risposta è fuori luogo.. Ma vedendo come procede il thread, non ne sono così sicuro. Nel caso ignora questo intervento.
Ragionando dal punto di vista logico, tu devi "parsare" un file di testo, cioè creare un altro file contenente una serie di informazioni specifiche, a partire dal file di input.
Il procedimento dovrebbe essere così:
1) carico il file di input in un array di stringhe
2) analizzo il testo, riga per riga: dalla variabile _line, recupero le informazioni e le deposito nella variabile _output, che contiene solo il testo che mi interessa
3) salvo la variabile _output in un array nuovo
4) eseguo le operazioni 2 e 3 per ogni riga in input
5) scrivo un file di testo con tutte le righe in output.
Se tu fai questo, non puoi trovarti un file di output uguale al file di input.
Posta tutto il tuo codice. Forse così ne veniamo fuori.
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Postato originariamente da fusebyte:
@Roby
una cortesia, le stringhe che hai messo usando REGEX mi filtrano solo questo tipo di Formattazione
HTTP://Miei-Appunti@miodatabase.net
mentre mi danno FALSE se trova una stringa formattata diversamente,tipo
HTTP://Susanna-Classe1a@scuola/elementare.pagella
HTTP://Alessio-Classe5b@scuola.media/Lunedi/ginnastica.1ora
il problema è che conoscendo poco la sintassi delle stringhe REGEX non sono riuscito ad aggiungere le stringhe giuste che servono per filtrare anche questo tipo di URL.
Codice sorgente - presumibilmente C# / VB.NET |
if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
{
match = System.Text.RegularExpressions.Regex.Match(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$");
}
else if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://.*/([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
{
match = System.Text.RegularExpressions.Regex.Match(input, "^http://.*/([^@/]+)@([^@/.]+).([^@/.]{2,3})$");
|
Potresti aiutarmi a capire come scrivere le REGEX per le URL in BLU o se c'è una sintassi che puo' essere valida per qualsiasi tipo di stringa e se non ti scoccia capire il significato di quei simboli? |
Si ti posso aiutare ma mi dovresti spiegare bene quele parte di quei url che hai scritto vorresti estrarre |
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Non mostrare solo una parte di codice ma *TUTTO* il codice, anche l'apertura del file, la lettura e la scrittura ...
Tutto ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Le parti da estrarre sono sempre le stesse a len variabile, nell'esempio postato
Codice sorgente - presumibilmente Plain Text |
HTTP://Miei.Appunti@miodatabase.net ( solo questa viene filtrata bene usando le REGEX postate)
HTTP://Susanna_Classe1a@scuola/elementare.pagella
HTTP://Alessio-Classe5b@scuola.media/Lunedi/ginnastica.1ora
HTTP://Clara:Rossi@scuola.media/superiore/via.De_Paolis-3a/
|
che possono essere tutte dentro lo stesso file.txt, e probabilmente potrebbero esserci anche altri tipi di formattazioni,tipo
Codice sorgente - presumibilmente Plain Text |
HTTP://Clara:Rossi@scuola.media.superiore.via.De_Paolis-3a/
HTTP://Clara:Rossi@scuola/media/superiore.via.De_Paolis-3a/
|
A volte per un errore di sintassi nel file.txt trovo anche una doppia @, tipo
Codice sorgente - presumibilmente Plain Text |
HTTP://Clara:Rossi@scuola/media/superiore.it@via.De_Paolis-3a.net
|
comunque a me serve sempre e solo la parte fra HTTP:// e @,
http:// xxxxxx:yyyyyyy@......qualsiasi cosa ci sia dopo la @ la dovrei scartare, quindi nel caso degli esempi,
dovrei ottenere:
Miei.Appunti
Susanna_Classe1a
Alessio-Classe5b
Clara:Rossi
Clara:Rossi
Clara:Rossi
Spero di essere riuscito a spiegarmi il piu' chiaramente possibile.
Ciao,Grazie
PS: Oggi mi sono letto un bel po' di pagine html sulle REGEX , ma non ho ancora ben capito come costruire una stringa REGEX che sia adatta per questo tipo di formattazione.
Potresti, per favore, sempre se ne hai voglia,commentarmi una di queste stringhe?
Ciao
Ultima modifica effettuata da fusebyte il 14/11/2012 alle 19:42 |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
beh per quei tipi di url la regex diventa molto piu semplice:
Codice sorgente - presumibilmente Plain Text |
Spiegazione:
La stringa deve iniziare con http:// {^http://} il carattere ^ indica inizio stringa poi deve contenere dei caratteri diversi da @ {[^@]} il simbolo ^ in questa posizione indica diverso, * indica numero di caratteri che puo andare da 0 a infinito e le parentesi tonde indicano che ritornera un match (in realta è un gruppo ma vediamo di non complicarti la vita andando a spiegare in che casi va usato oltre al match). Ricapitolando la regex si aspetta un http://la_stringa_ da_salvare@e_dopo_la_@_ignora_tutto.
Sono stato abbastanza chiaro, le regex credo che sia uno degli argomenti piu ostici che si possano trovare in programmazione ma con un po di esercizio risultano veramente comode.
Se vuoi fare un po di esercizio ti consiglio questo tool http://www.gskinner.com/RegExr/ è comodo sia per imparare che per generare nuover regex.
PS alcuni linguaggi tipo PHP richiedono l'escape prima del caratte / ma non ricordo se lo richieda pure C# al massimo ci aggiungi un \ prima di ogni slash
Spero di essere stato utile
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Quindi tolgo tutte le stringhe che mi hai postato precedentemente ed incollo solo l'espressione che hai postato ora.
Questa mi prende in considerazione tutti i vari tipi di URL.
Spero di aver capito bene.
Grazie per il Tool ne faro' uso per fare pratica.
Ciao
|
|