+ Rispondi al Thread
Pagina 3 di 4 primaprima 1234 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 32

Discussione: Estrazione caratteri da una stringa

  1. #21
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,858
    Blogs
    5
    Ok .... allora prova ad aggiungere al codice che ti avevo proposto quello che inserisco come seconda riga

    codice:
            Dim elenco As String = System.IO.File.ReadAllText( "elenco.txt" )
            elenco &= Environment.NewLine        Dim v() As String = Strings.Split(elenco, ":")
            For Each s As String In v
                If s.Contains("power") Then
                    Console.WriteLine(s.Trim.Substring(0, s.IndexOf(Environment.NewLine)))
                End If
            Next
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  2. #22
    ljt
    ljt non è in linea Scolaretto
    Post
    219
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Ok .... allora prova ad aggiungere al codice che ti avevo proposto quello che inserisco come seconda riga

    codice:
            Dim elenco As String = System.IO.File.ReadAllText( "elenco.txt" )
            elenco &= Environment.NewLine        Dim v() As String = Strings.Split(elenco, ":")
            For Each s As String In v
                If s.Contains("power") Then
                    Console.WriteLine(s.Trim.Substring(0, s.IndexOf(Environment.NewLine)))
                End If
            Next
    Ho provato a inserire la riga nel codice, ma solito errore.
    Il codice l'ho modificato in questo modo, inserendo al posto del percorso del file il contenuto del comando cmd.result:
    codice:
                Dim elenco As String = cmd.Result
                elenco &= Environment.NewLine
                Dim v() As String = Strings.Split(elenco, ":")
                For Each s As String In v
                    If s.Contains("power") Then
                        Console.WriteLine(s.Trim.Substring(0, s.IndexOf(Environment.NewLine)))
                    End If
                Next
    Veramente strano, perché facendo la visualizzazione del comando cmd.result con:
    codice:
    msgbox(cmd.result)
    ottengo esattamente la stringa che viene scritta nel file elenco.txt

  3. #23
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,858
    Blogs
    5
    Non puoi confrontare sullo schermo le stringhe perché, anche se sembrano uguali, possono contenere caratteri non visibili diversi.

    Comunque la questione mi sembra stana. Sei sicuro che te lo dia proprio in quel codice e non da qualche altra parte?
    Quando hai l'errore ha già visualizzato qualcosa o no?

    Se dopo la

    For Each s As String In v

    metti una

    MsgBox(s)

    quali stringhe ti vengono visualizzate prima dell'errore?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  4. #24
    ljt
    ljt non è in linea Scolaretto
    Post
    219
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Non puoi confrontare sullo schermo le stringhe perché, anche se sembrano uguali, possono contenere caratteri non visibili diversi.

    Comunque la questione mi sembra stana. Sei sicuro che te lo dia proprio in quel codice e non da qualche altra parte?
    Quando hai l'errore ha già visualizzato qualcosa o no?

    Se dopo la

    For Each s As String In v

    metti una

    MsgBox(s)

    quali stringhe ti vengono visualizzate prima dell'errore?
    La cosa strana che risulta popolata ed esce:
    codice:
    computer1
        power-state ( RO)
    Sto provando a debuggare passo passo, ma l'errore esce fuori sempre nella riga:
    codice:
    Console.WriteLine(s.Trim.Substring(0, s.IndexOf(Environment.NewLine)))
    Ho provato a mettere il contenuto del comando in una casella di testo:
    codice:
    Dim elenco As String = txtTesto1.Text.ToString.Trim
    ma niente solito errore.
    Il bello che se faccio un msgbox(cmd.result) esce fuori l'esatto contenuto del file elenco.txt

  5. #25
    ljt
    ljt non è in linea Scolaretto
    Post
    219
    Altri test:
    ho inserito:
    codice:
        For Each s As String In v
                    If s.Contains("power") Then
                        MsgBox(s.Length.ToString)  --> restituisce 34
                        MsgBox(v.Length.ToString)  --> restituisce 17
                        Console.WriteLine(s.Trim.Substring(0, s.IndexOf(Environment.NewLine)))
                    End If
                Next
    I valori non sono mai a zero.

  6. #26
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,858
    Blogs
    5
    Scusa ma ti ho fatto una domanda precisa che ti ripeto

    metti una

    MsgBox(s)

    quali stringhe ti vengono visualizzate prima dell'errore?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #27
    ljt
    ljt non è in linea Scolaretto
    Post
    219
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Scusa ma ti ho fatto una domanda precisa che ti ripeto

    metti una

    MsgBox(s)

    quali stringhe ti vengono visualizzate prima dell'errore?
    Come prima stringa viene visualizzato:
    "uuid ( RO) "
    poi
    " f51bf12f-478c-79ed-c7bb-4eddeb8dc01f" & vbLf & " name-label ( RW)"
    poi
    " computer1" & vbLf & " power-state ( RO)"
    e alla fine il solito errore:
    La lunghezza non può essere minore di zero.
    Nome parametro: length
    Ho lasciato gli apici di inizio e fine per fare capire che ci sono anche degli spazi all'inizio e fine stringa.

  8. #28
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,858
    Blogs
    5
    Se solo l'avessi scritto prima

    vbLf

    e non vbCrLf

    Il primo è impostato dai sistemi *nix e il secondo da Windows.

    Quindi prova con

    Console.WriteLine(s.Trim.Substring(0, s.IndexOf(vbLf)))
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  9. #29
    ljt
    ljt non è in linea Scolaretto
    Post
    219
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Se solo l'avessi scritto prima

    vbLf

    e non vbCrLf

    Il primo è impostato dai sistemi *nix e il secondo da Windows.

    Quindi prova con

    Console.WriteLine(s.Trim.Substring(0, s.IndexOf(vbLf)))
    E' vero, ma sbagliando si impara, me ne sono reso subito conto quando ho visto il valore della stringa.
    Difatti il comando cmd.result è eseguito su pc con linux.
    Comunque adesso tutto ok ancora una volta hai fatto centro.

    Per chiarimenti riporto il codice corretto:
    codice:
                Dim elenco As String = cmd.Result
                elenco &= Environment.NewLine
                Dim v() As String = Strings.Split(elenco, ":")
                For Each s As String In v
                    If s.Contains("power") Then
                        Console.WriteLine(s.Trim.Substring(0, s.IndexOf(vbLf)))
                        dgvVm.Rows.Add(False, s.Trim.Substring(0, s.IndexOf(vbLf)))
                    End If
                Next
    Grazie di nuovo a tutti e in particolare modo, ancora una volta, ad AntonioG.

    Per me il thread è chiuso e risolto.

    Alla prossima puntata.


  10. #30
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,858
    Blogs
    5
    A questo punto il codice corretto è questo

    codice:
                Dim elenco As String = cmd.Result
                Dim v() As String = Strings.Split(elenco, ":")
                For Each s As String In v
                    If s.Contains("power") Then
                        dgvVm.Rows.Add(False, s.Trim.Substring(0, s.IndexOf(vbLf)))
                    End If
                Next
    dato che la seconda linea del vecchio codice non ha più senso e quella che scrive in Console non serve più
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread
Pagina 3 di 4 primaprima 1234 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi