Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    estrarre valori da array char

    Buongiorno!!!Volevo chiedere informazioni riguardo a come si possano estrarre valori
    da un array di tipo 'char '

    Io acquisisco da seriale una serie di inforamzioni sotto forma di byte che memorizzo in un
    vettore di tipo char di questo tipo:

    01 40.98 51.16 54.98 90.00 0.00 0.00
    .................................................. .
    .................................................. .

    i dati rappresentano : il canale di acquisizione '01',
    le coordinate x y z e gli angoli dell'orientamento nello spazio di un sensore.
    La scelta del tipo Char è inevitabile al fine del giusto riconoscimento
    dei caratteri che vengono acquisiti.

    ora io dovrei estrapolare in array di double o single
    le varie coordinate e angoli in modo tale che ognuno sia memeorizzato nel proprio
    array per poi visualizzarle tramite un plot.

    come osso fare?
    Dovrei usare delle collection?
    qualcuno mi puo anche solo suggerire quale strada intraprendere...
    è da pochissimo che programmo in vb.net
    Grazie!!!!
    Luca

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Questo l'ho corretto io...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Guarda che char rappresenta un carattere Unicode, quindi vale 2 bytes... devi usare il tipo Byte...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Ciao , grazie del suggerimento ma ho proprio verificato ora
    che i dati che ho in ingresso sulla seriale sono dei CHAR (codifica Ascii)
    e non Byte come avevo scritto....scusa!

    Io riesco a memorizzare i dati (che sono 47 char) da seriale in un array di tipo char

    es.
    dim buffer as char
    serialport.read(bufffer, 0 , 47)

    Il problema e' poi "scomporre" questo array...mi spiego :

    se ricevo :
    01 32.12 12.34 33.22 90.00 11.00 180.00
    vorrei memorizzare in altri vettori le coordinate ottenute :
    es. 32.12

    Ho provato estrarre con un ciclo gli elementi interessati e a concatenarli come STRING in una variabile ma poi non riesco a convertirli in double...causa eccezioni

    come posso fare?
    Grazie!
    Luca

  5. #5
    Aspetta un momento... dimmi con precisione:
    • che oggetto è "serialport";
    • la sintassi del suo metodo "read";
    • la sua documentazione;
    • come vengono inviati i dati (ordine, significato);
    • come intendi usarli poi (così da valutare come memorizzarli).

    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Allora:
    (premetto che sto utilizzando visual basic .net 2005)

    1) serialport e' l'oggetto che identifica la mia connessione alla
    porta seriale. Puo essere inserito sfruttando il toolbox e attraverso le sue proprieta'
    si possono settare opportunamente le caratteristiche della connessione es. baudrate,bit di parita'

    2)il metodo read ha la seguente sintassi

    serialport.read(buffer as char, offset as integer,count as integer)

    Summary:
    Reads a number of bytes from the System.IO.Ports.SerialPort input buffer and writes those bytes into a byte array at a given offset.

    parametri :
    offset: The offset in the buffer array to begin writing.
    count: The number of bytes to read.
    buffer: The character array to write the input to.

    Nel mio caso memorizzo in un array (di tipo char) i 47 char (offest lo pongo =0).

    4) I dati vengono inviati da un sensore tramite seriale che fornisce informazioni riguardo
    le coordinate e gli angoli di orientamento di un oggetto :
    es.
    01 10.00 20.00 5.00 0.00 90.00 60.00 (sono una riga di 47 char)

    01 e' il numero del canale ma poco mi importa;
    10.00 e' la coordinata x;
    20.00 e' la coordinata y;
    .................................
    60.00 e' il terzo angolo di orientamento nello spazio

    vorrei poter estrapolare le varie coordinate in 6 array differenti di tipo double.
    il problema e' che una volta acquisiti i dati sono riconosciuti come char!
    Luca

  7. #7
    Converti l'array in una stringa, quindi trasformalo in un array di stringhe dividendolo in base agli spazi, infine converti il tutto in un array di double:
    codice:
            Dim strarr() As String = New String(buffer).Split(New Char() {" "c})
            Dim dblarr(strarr.GetLength(0) - 2) As Double
            Dim nfi As New Globalization.NumberFormatInfo
            nfi.NumberDecimalSeparator = "."
            For c As Integer = 0 To dblarr.GetLength(0) - 1
                dblarr(c) = Double.Parse(strarr(c + 1), nfi)
            Next
    In questa maniera dblarr conterrà i vari valori eccetto il numero di canale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Ok ho provato il tuo codice e funziona...
    mi è stato davvero utile nella conversione da string a double!
    Grazie mille!!!

    ....una curiosità: non capisco il significato di quella 'c' dopo le " " nella rima riga di codice
    Luca

  9. #9
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    sta a significare che è una variabile char.

  10. #10
    Esatto; senza di essa il " " verrebbe considerato come una stringa.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.