Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Visual C#] Filtrare File.Txt
Forum - C# / VB.NET - [Visual C#] Filtrare File.Txt

Pagine: [ 1 2 3 4 5 6 7 ] Precedente | Prossimo
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 10:16
Lunedý, 05/11/2012
Avrei bisogno di un piccolo aiuto.
Nella var _line ho caricato tutta la lista del file.txt, ma quando vado a creare il file di output mi da pari pari gli stessi dati del file di input.
Non riesco a capire dove sbaglio!

Questo codice "dovrebbe contare 7 che sta per la lenght di HTTP:// e salvare in output tutto quello che c'Ŕ fino a "@",
ma non lo fa.
E secondo me,si potrebbe fare meglio perchŔ se mi capita una URL con SubFolder tipo:

Codice sorgente - presumibilmente Plain Text

  1. Codice sorgente - presumibilmente Plain Text

  2. http://giorgia@amazing.com
  3. http://parents/miaragazza@scassasempre.net




la seconda URL non viene filtrata bene.

Il mio output dovrebbe essere
Giorgia
miaragazza

Codice sorgente - presumibilmente C++

  1. if (checkBox_MyPrivateDatal.Checked)
  2.                     if (!string.IsNullOrEmpty(_line))
  3.                     {
  4.                         try
  5.                         {
  6.                             int _trimLength = Convert.ToInt32(_line.Trim());
  7.  
  8.                             string line = (_line); // Passi la tua stringa
  9.                             _trimLength = _line.IndexOf("@"); // Individui il carattere @
  10.                             _line = _line.Substring(7, _trimLength);// Ti prendi solo ci˛ che ti serve
  11.                                    
  12.                                break;
  13.                                }  
  14.                        
  15.                           catch (Exception)
  16.                         {
  17.                       }
  18.  
  19.                    }



Chi mi da una mano?

Grazie Mille

Ciao

Ultima modifica effettuata da fusebyte il 05/11/2012 alle 10:20
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 10:48
Lunedý, 05/11/2012
Ciao
Uhm.. senza andarsi a complicare troppo la vita, a te interessa il testo compreso tra l'ultima "/" e la "@".
Basta che usi il metodo substring, specificando come inizio carattere LastIndexOf("/"), che eviti di prendere anche la sottodirectory, e come lunghezza, fai riferimento alla "@".
Se con i metodi non ti trovi tanto, una possibile soluzione potrebbe essere di convertire la tua stringa in un array di Char, poi lo scorri dalla fine all'inizio, salvandoti in 2 variabili la prima occorrenza del carattere "/" e quella di "@". Dopo di che estrai i caratteri compresi tra le 2 "variabili".
;)


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:56
Lunedý, 05/11/2012
Quella Convert.ToInt32 non ha alcun senso ...

Comunque, ti basta

Codice sorgente - presumibilmente C#

  1. string res = "";
  2. int atpos = line.IndexOf("@");
  3.  
  4. if (atpos>0)
  5. {
  6.     int slpos = line.LastIndexOf('/', atpos);
  7.     if(slpos>0)
  8.         res =line.Substring(slpos+1, atpos - slpos-1);
  9. }



e il risultato lo hai nella stringa res

Ultima modifica effettuata da nessuno il 05/11/2012 alle 10:57


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Ó.
PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 12:20
Lunedý, 05/11/2012
Vi Ringrazio entrambi, provo subito i vostri consigli.

Grazie ancora..sperando di riuscire :-)))


Ciao

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1165
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:37
Lunedý, 05/11/2012
Scusate ma non sarebbe molto piu semplice lavorarsela con le regex? Ŕ un metodo anche un po piu elegante

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:05
Lunedý, 05/11/2012
Certo che si pu˛ ma molte volte bisogna prospettare soluzioni che siano alla portata di chi fa la domanda ...


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Ó.
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1165
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:09
Lunedý, 05/11/2012
Testo quotato

Postato originariamente da nessuno:

Certo che si pu˛ ma molte volte bisogna prospettare soluzioni che siano alla portata di chi fa la domanda ...  


Si hai ragione nessuno :) comunque io l'ho buttata li come idea, se poi per fusebyte puo andare, lo si aiuta a buttare giu una regex.

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 15:42
Lunedý, 05/11/2012
Si, disponibilissimo ad imparare.
Pero'Vi chiedo un piccolo sforzo e farmi vedere almeno come prima volta un esempio completo.

Ho provato il codice di Nessuno e non vuole andare/per colpa mia)

Avendo caricato il file sulla var _line ,
Codice sorgente - presumibilmente C# / VB.NET

  1. }
  2.  
  3.                
  4.             while (!_read.EndOfStream)
  5.             {
  6.                 string _line = _read.ReadLine();



ho modificato cosi'

Codice sorgente - presumibilmente C# / VB.NET

  1. if (checkBox_MyPrivareData1.Checked)
  2.                               if (!string.IsNullOrEmpty(_line))
  3.                     {
  4.                         try
  5.                         {
  6.                          
  7.                                    string res = "";
  8.    
  9.                                       int atpos = _line.IndexOf("@");
  10.  
  11.        
  12.  
  13.                                        if (atpos>0)
  14.    
  15.                                                   {
  16.    
  17.                                        int slpos = _line.LastIndexOf('/', atpos);
  18.  
  19.                                         if(slpos>0)
  20.  
  21.                                         res = _line.Substring(slpos+1, atpos - slpos-1);
  22.  
  23.                                                      
  24.                                     }  
  25.                               }
  26.                         catch (Exception)
  27.                         {
  28.                      
  29.  
  30.                    }
  31.  
  32.                }



ma non va, nel file di output continua a stamparmi gli stessi dati dell'input.
Stavolta dove ho sbagliato,mannaggia....

Grazie,Ciao

Ultima modifica effettuata da fusebyte il 05/11/2012 alle 15:59
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1165
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:27
Lunedý, 05/11/2012
Guarda ho buttato giu velocemente due righe
Codice sorgente - presumibilmente Delphi

  1. System.Text.RegularExpressions.Match match = null;
  2.             string input = "http://asfsdf/giorgia@amazing.com";
  3.             if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
  4.             {
  5.                 match = System.Text.RegularExpressions.Regex.Match(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$");
  6.             }
  7.             else if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://.*/([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
  8.             {
  9.                 match = System.Text.RegularExpressions.Regex.Match(input, "^http://.*/([^@/]+)@([^@/.]+).([^@/.]{2,3})$");
  10.             }
  11.             if(match != null)
  12.                 Console.WriteLine(match.Groups[1] + " " + match.Groups[2] + " " + match.Groups[3]);
  13.             else
  14.                 Console.WriteLine("false");


(Per i casi che hai citato funziona, bisogna vedere se esistono altre possibili eccezioni)
Questo sfrutta le famose regex o espressioni regolari vedi se riesci a capire il codice, per qualsiasi chiarimento chiedi pure.
PS il codice anche se funziona Ŕ una bozza, si puo migliorare

PM Quote
Pagine: [ 1 2 3 4 5 6 7 ] Precedente | Prossimo