Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,008

    [VB.NET] Indicazione del separatore sul metodo Split()

    Ciao a tutti,
    vi propongo un piccolo quesito.

    codice:
            Dim str As String = "CIAO IL MIO NOME E' #SPLIT# VERONICA!"
            Dim lst As String() = str.Split("#SPLIT#")
    dato questo codice io mi aspettavo di avere una matrice di stringhe con 2 elementi ovvero:

    • CIAO IL MIO NOME E'
    • VERONICA

    invece mi ritrovo:
    • CIAO IL MIO NOME E'
    • SPLIT
    • VERONICA


    è normale questo comportamento?
    Il separatore della funzione split() ha qualche limite riguardo caratteri speciali? Se si: dove posso trovare la lista di caratteri che generano questa situazione?

    Grazie a tutti

  2. #2
    prova con

    Dim lst As String = Split(str, "#SPLIT#", CompareMethod.Text)

    cfr https://docs.microsoft.com/it-it/dot...tframework-4.8

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,008
    Quote Originariamente inviata da optime Visualizza il messaggio
    prova con

    Dim lst As String = Split(str, "#SPLIT#", CompareMethod.Text)

    cfr https://docs.microsoft.com/it-it/dot...tframework-4.8

    Così non splitta nemmeno...

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,008
    Quote Originariamente inviata da optime Visualizza il messaggio
    scusa, ovviamente dim lst as string()
    Si si ovviamente ho creato una variabile matrice, ma non splitta...

  6. #6
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,961
    così funziona
    Dim lst As String() = Split(str, "#SPLIT#", 0)

  7. #7
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,008
    Quote Originariamente inviata da patel Visualizza il messaggio
    così funziona
    Dim lst As String() = Split(str, "#SPLIT#", 0)
    Ok quindi il problema è nell'attributo "compare method" e non è un limite dei caratteri nel separatore!

    Quindi la funzione .split() (che è più pratica da usare) non va bene perchè non ha questo argomento passato?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,903
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    è normale questo comportamento?
    Il separatore della funzione split() ha qualche limite riguardo caratteri speciali? Se si: dove posso trovare la lista di caratteri che generano questa situazione?
    Il comportamento è del tutto normale.

    Il metodo Split accetta come parametro una stringa contenente un separatore (e sottolineo uno) oppure un array di stringhe con più separatori, attraverso i quali il metodo suddivide la stringa originale di partenza ogni volta che ne trova uno, generando l'array delle stringhe spezzate.

    Ne consegue che, nel tuo esempio, non avendo usato un array di separatori, ci troviamo nel caso di separatore singolo, formato sempre da un carattere però: questo vuol dire che, avendo tu indicato come valore #SPLIT#, il separatore effettivo che verrà usato sarà il primo carattere, ossia "#", ignorando tutti gli altri caratteri della stringa.

    In sintesi, la stringa deve avere una lunghezza di 1 carattere, perché tutti gli altri verranno ignorati.

    Il carattere non deve essere speciale: se provi a togliere il primo "#" e a lasciare "SPLIT#", vedrai che la suddivisione verrà fatta in base al carattere "S".

    Questo risulta fuorviante credo solo in Visual Basic e forse dovuto al fatto che il tipo Char viene di solito rappresentato allo stesso modo della stringa (a meno di non usare il suffisso letterale "c"), mentre in C# si usa l'apice singolo al posto delle virgolette, distinguendo così i tipi di dati.

    Molto diversa è invece la funzione Split(), da non confondere col metodo Split() della stringa: questa prevede una logica più estesa ed è importata dall'assembly che garantisce compatibilità all'indietro con il vecchio VB6, e che fa molte più cose.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.