+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

Problemi con gestione stringhe

  1. #1
    Post
    198
    Like Inviati  
    0
    Like Ricevuti  
    1
    Salve a tutti, ho problemi con la formattazione di alcuni dati.

    Ho necessità di racchiudere 3 valori numerici in una stringa (le 3 coordinate di un punto).

    int coordx = DistanzaTotaleXcentro + Globale.Griglia.LineaX[k].Distanza;
    int coordy = DistanzaTotaleYcentro + Globale.Griglia.LineaY[i].Distanza;
    int coordz = distanzaz;
    string guid = "Z"+ coordx.ToString("000000")+ coordy.ToString("000000")+coordz.ToString("000000") , "puntigriglia");
    
    funziona bene con i valori positivi.
    esempio
    x= 2000
    y= 3000
    z=200

    la stringa è:
    Z002000003000000200

    quando riprendo da una'altra parte con:
    int x = Convert.ToInt32(cd.id.Substring(1, 6));
    int y = Convert.ToInt32(cd.id.Substring(7, 6));
    int z = Convert.ToInt32(cd.id.Substring(13, 6));
    
    Funziona bene.

    Quando invece, raramente c'è qualche valore negativo, sballa tutto.

    x= -2000
    y= 3000
    z=200
    la stringa diventa:
    Z-00200003000000200

    estraendo ottengo:
    cd.id.Substring(1, 6) = -00200

    int x = Convert.ToInt32(cd.id.Substring(1, 6));
    quindi:
    x=-200

    praticamente il meno occupa uno spazio e si mangia uno zero.


    l'unica cosa che mi viene in mente è mettere un carattere in più do occupare solo il segno + o -.

    Come pensate sia possibile risolvere?

    Salute
    Sebastiano Floridia

  2. #2
    Sgrubak non è in linea Scribacchino
    Post
    590
    Like Inviati  
    10
    Like Ricevuti  
    9
    Matematicamente parlando, un numero senza il segno non ha senso.
    Hai varie strade:
    - lo gestisci come hai già suggerito;
    - frapponi alla stringa dei caratteri che identifichino l'inizio di ciascuna coordinata, così da rendere sottinteso il + nei valori positivi, ad esempio [Zcx-002000cy03000cz000200], ma resta più macchinoso fare poi il parsing della stringa per riottenere le coordinate. Ti permette però di salvarle anche in ordine diverso da X-Y-Z, o di ometterne qualcuna per sottindenderla 0;
    - frapponi alla stringa un carattere fisso che ti permetta con un semplice Split un array ciclabile per riottenere il valore numerico con int.Parse, così potresti addirittura omettere gli zeri antecedenti. Esempio: [Z|-2000|3000|200]

    Questi sono un paio di esempi che mi vengono in mente così al volo...

  3. #3
    Post
    198
    Like Inviati  
    0
    Like Ricevuti  
    1
    Grazie!

    Mi piace molto l'ultima.
    verifico che non vada il contrasto con la key di selezione del mondo grafico opengl.
    Grazie
    Sebastiano Floridia

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,482
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    34
    Non capisco perché usi le stringhe con questa doppia conversione al posto delle strutture fatte apposta allo scopo.

    Comunque, se vuoi inserire i valori in una stringa ti consiglio la codifica esadecimale a 8 caratteri, così

                int coordx = 500;
                int coordy = 1000;
                int coordz = -2000;
                string guid = "Z" + coordx.ToString("X8") + coordy.ToString("X8") + coordz.ToString("X8");
    
    e poi

                int x = Convert.ToInt32(guid.Substring(1, 8), 16);
                int y = Convert.ToInt32(guid.Substring(9, 8), 16);
                int z = Convert.ToInt32(guid.Substring(17, 8), 16);
    
    Però, ripeto, l'uso delle stringhe in questo modo mi sembra molto inefficiente.
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    Post
    198
    Like Inviati  
    0
    Like Ricevuti  
    1
    Grazie!!!
    Purtroppo va dentro una funzione che accetta solo una stringa, di un componente esterno che gestisce un motore grafico opengl.
    Purtroppo non c'è alternativa. una string che contiene tutte le informazioni.

    Grazie
    Sebastiano Floridia

  6. #6
    Post
    1,900
    Blogs
    21
    Like Inviati  
    14
    Like Ricevuti  
    13
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Purtroppo va dentro una funzione che accetta solo una stringa, di un componente esterno che gestisce un motore grafico opengl.
    Ciao,
    non sono sicurissimo di aver capito cosa ti occorre ... ma tentar non nuoce
      class Program
        {
            static void Main(string[] args)
            {
                int x = -1000;
                int y = -20000; // -2000000
                int z = 3;
    
                var sZ = "Z" + ConvertToOpenGl(x) + ConvertToOpenGl(y) + ConvertToOpenGl(z);
    
                Console.WriteLine(sZ);
    
    
              x = Convert.ToInt32(sZ.Substring(1, 6));
              y = Convert.ToInt32(sZ.Substring(7, 6));
              z = Convert.ToInt32(sZ.Substring(13, 6));
    
                Console.WriteLine(x + "," + y +"," + z);
    
                Console.ReadLine();
    
            }
    
            private static string ConvertToOpenGl( int i )
            {
                var sRes = string.Empty;
    
                if (i<0)
                { 
                    sRes = (-i).ToString("000000");
                    if (sRes[0] == '0')
                        sRes = "-" + sRes.Substring(1);
                    else
                        throw new Exception("6 caratteri sono insufficienti");
                }
                else
                    sRes = i.ToString("000000");
               
                 /* se hai bisogno di verificare i dati
                if (sRes.Length>6)
                        throw new Exception("6 caratteri sono insufficienti");
                 */
    
                return sRes;
            }
        }
    
    HTH
    Ultima modifica di sspintux; 25-04-2020 16:23 
    ℹ️ Leggi di più su sspintux ...

  7. #7
    Post
    198
    Like Inviati  
    0
    Like Ricevuti  
    1
    Grazie a tutti!!!
    Ho utilizzato un mix di tutte queste proposte!!!

    Saluti
    Sebastiano Floridia

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Problema con gestione stringhe
    Da lenna85 nel forum Visual Basic .Net
    Risposte: 7
    Ultimo Post: 18-10-2014, 11:20
  2. Access gestione stringhe numeriche
    Da fohsb nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 24-08-2009, 10:55
  3. problemi gestione eventi in c++
    Da il pollo nel forum C/C++
    Risposte: 1
    Ultimo Post: 21-11-2008, 21:38
  4. Gestione stringhe
    Da RobertoDG nel forum Delphi
    Risposte: 3
    Ultimo Post: 29-11-2006, 19:26
  5. Gestione stringhe
    Da lucagfc nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 05-07-2006, 13:44