Discussione: [C#] Split string
View Single Post
Old 27-11-2009, 18:08   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Cittą: Londra (Torino)
Messaggi: 3692
Bene.
Pero' fra 6 mesi, se devo rileggere, mi viene mal di testa.

Edit: Ripropongo, visto che ogni tanto pensare 1 minuto in piu' e' meglio.
Propongo la seguente, con una modifica variante dell'originale, sostanzialmetne identico alla tua

Codice:
static void Main(string[] args)
{
    string mstr = "1,-400,400,3,243834,'AAAAAA',52895,'BBBBB',660,'CCC,CCC,¬',2";

    mstr = Regex.Replace(mstr, "'[^']*'", str => str.Value.Replace(',', '£'));

    var res = mstr
        .Split(',')
        .Select(str => str.Replace('£', ','))
        .ToArray();                    
}
Per la Regex, e' da leggersi cosi':
Cerco tutte le sottosequenze che cominciano con ', terminano con ' e in mezzo hanno un qualsiasi set di caratteri (Eventualmente vuoto) NON composto '
sostituisco ciascuna di queste occorrenze con una nuova stringa, identica a ciascuna di quelle trovate, nelle quali sostituisco ciascun ',' con un '£'

L'ultimo invece e' una sequenza che serve solo per splittare su ',' rimpiazzare i '£' in ciascuna sottostringa e restituire l'array delle sottostringhe.

Occhio.
Il tuio primo ciclo cambia il dominio del for all'interno del ciclo stesso, e non e' mai troppo bello.
E la tua ultima parte e' poco effciente.
Le stringhe sono immutabili in C#. Ogni volta che scrivi
spl[j] = r.Replace('€', ','); //Basterebbe mettere spl[j]=','; no?
viene fatta una copia integrale della stringa, dove viene rimpiazzato solo l'elemento scelto...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 27-11-2009 alle 18:24.
gugoXX č offline   Rispondi citando il messaggio o parte di esso