Oppure

Loading
13/11/12 23:17
fusebyte
Risolto.

Vi ringrazio ,la var e' _line , come avevo detto, sbagliavo solo l'ultima riga del il listato di Roby e l'assegnazione della var per quello di Nessuno.

 Console.WriteLine = (match.Groups[1] + " " + match.Groups[2] + " " + match.Groups[3]);

                  else

                      Console.WriteLine = ("false");


che ho modificato cosi' e secondo cosa devo stampare vario il numero dei match.Groups().

  _Line = (match.Groups[1] + " " );     // + match.Groups[2] + " " + match.Groups[3]);
                         else
                               _line = ("false");




@Roby

una cortesia, le stringhe che hai messo usando REGEX mi filtrano solo questo tipo di Formattazione
miodatabase.net
mentre mi danno FALSE se trova una stringa formattata diversamente,tipo

scuola/…
scuola.media/Lunedi/…


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.


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?

Ti Ringrazio moltissimo.
--------------------------------------------------------------------------------------------------------------------


Grazie anche a te Nessuno, pero' nonostante provi e riprovi il risultato è, o il file output.txt vuoto o uguale all'input.
Il file di Input.txt è caricato e assegnato alla var _line , sapendo questo, cosa dovrei modificare nel listato, perche' ho provato davvero in molti modi ma non sono riuscito a filtrare il txt nel modo corretto.
Cmq,Grazie.

Ciao Fuse
Ultima modifica effettuata da fusebyte 14/11/12 3:24
aaa
14/11/12 7:42
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.
14/11/12 11:51
fusebyte


        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 14/11/12 11:57
aaa
14/11/12 15:09
Renny
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.
aaa
14/11/12 16:53
Roby94
Postato originariamente da fusebyte:

@Roby

una cortesia, le stringhe che hai messo usando REGEX mi filtrano solo questo tipo di Formattazione
miodatabase.net
mentre mi danno FALSE se trova una stringa formattata diversamente,tipo

scuola/…
scuola.media/Lunedi/…


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.


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
aaa
14/11/12 17:56
Non mostrare solo una parte di codice ma *TUTTO* il codice, anche l'apertura del file, la lettura e la scrittura ...

Tutto ...
14/11/12 18:03
fusebyte
Le parti da estrarre sono sempre le stesse a len variabile, nell'esempio postato
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
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
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.:k:

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 14/11/12 18:42
aaa
14/11/12 19:04
Roby94
beh per quei tipi di url la regex diventa molto piu semplice:
^http://([^@]*)

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 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 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 ;)
aaa