Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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".
;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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: 1170
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: 6402
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: 1170
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: 1170
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