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 - Pagina 3

Pagine: [ 1 2 3 4 5 6 7 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:42
Mercoledì, 14/11/2012
Testo quotato

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


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 12:51
Mercoledì, 14/11/2012

                        
Codice sorgente - presumibilmente C# / VB.NET

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




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


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 16:09
Mercoledì, 14/11/2012
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.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:53
Mercoledì, 14/11/2012
Testo quotato

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

  1. if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
  2.  
  3.     {
  4.  
  5. match = System.Text.RegularExpressions.Regex.Match(input, "^http://([^@/]+)@([^@/.]+).([^@/.]{2,3})$");
  6.  
  7.    }
  8.  
  9.   else if (System.Text.RegularExpressions.Regex.IsMatch(input, "^http://.*/([^@/]+)@([^@/.]+).([^@/.]{2,3})$"))
  10.  
  11.     {
  12.  
  13.  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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:56
Mercoledì, 14/11/2012
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à.
PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 19:03
Mercoledì, 14/11/2012
Le parti da estrarre sono sempre le stesse a len variabile, nell'esempio postato
Codice sorgente - presumibilmente Plain Text

  1. HTTP://Miei.Appunti@miodatabase.net ( solo questa viene filtrata bene usando le REGEX postate)
  2. HTTP://Susanna_Classe1a@scuola/elementare.pagella
  3. HTTP://Alessio-Classe5b@scuola.media/Lunedi/ginnastica.1ora
  4. 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

  1. HTTP://Clara:Rossi@scuola.media.superiore.via.De_Paolis-3a/
  2. 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

  1. 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 il 14/11/2012 alle 19:42
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:04
Mercoledì, 14/11/2012
beh per quei tipi di url la regex diventa molto piu semplice:
Codice sorgente - presumibilmente Plain Text

  1. ^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 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 ;)

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 20:46
Mercoledì, 14/11/2012
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

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