Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: alexarmato66 - Giugno 13, 2021, 10:56:20 am

Titolo: testo percentuale x 1000
Inserito da: alexarmato66 - Giugno 13, 2021, 10:56:20 am
Dovrei aggiungere il simbolo 'per mille' come posso fare?
Codice: [Seleziona]
.....+'%'
Titolo: Re:testo percentuale x 1000
Inserito da: Stilgar - Giugno 13, 2021, 12:31:49 pm
Ciao

Cercalo tra i simboli del font in uso.

Potrebbe non esistere il glifo.

Una volta trovato prova ad inserirlo direttamente nella stringa. Se hai fortuna no devi impazzire con i codec.
Strada ultra rapida.

Stilgar
Titolo: Re:testo percentuale x 1000
Inserito da: DragoRosso - Giugno 13, 2021, 09:12:04 pm
Questo è il carattere: ‰

Ti allego anche un doc di testo se non dovessi riuscire a copiarlo.

Ciao
Titolo: Re:testo percentuale x 1000
Inserito da: SB - Giugno 14, 2021, 06:09:33 pm
Attento al formato di codifica del file sorgente, che sia compatibile col carattere e col resto del programma
Titolo: Re:testo percentuale x 1000
Inserito da: DragoRosso - Giugno 14, 2021, 06:54:17 pm
Si, il carattere è formattato come UTF8, quindi è compatibile con i tipi string ma non con i tipi ansistring.

Penso che dovrebbe essere chiaro a tutti che i caratteri diversi dagli ascii dovrebbero essere trattati con i tipi string.

@SB hai fatto comunque bene a ricordare la cosa, soprauttto per ciò che riguarda il formato del sorgente ... anche se io non saprei in Lazarus come cambiare il formato di salvataggio.

Inoltre nonostante i tipi string siano di default definiti come ansistring nelle opzioni di progetto, se si attribuisce il dato testuale '‰' ad una variabile string questa gestisce correttamente il dato come non ansistring. Complimenti al compilatore.

Ciao ciao
Titolo: Re:testo percentuale x 1000
Inserito da: SB - Giugno 14, 2021, 08:56:40 pm
Per essere sicuri sarebbe meglio usare WideString o UnicodeString, invece di string che dipende dalle impostazioni del compilatore. Purtroppo è più scomodo da scrivere
Con Delphi ci sono stati problemi quando hanno cambiato la semantica di default del tipo string.

Per quanto riguarda i formati dei file, purtroppo mi è capitato che l'editor visualizzava correttamente i caratteri non ascii incollati nel sorgente, ma in compilazione poi tentava di codificarli come ascii con i risultati che potete immaginare
Se dovesse capitare, avevo risolto con notepad++ forzando il salvataggio del file in formato utf8
Titolo: Re:testo percentuale x 1000
Inserito da: DragoRosso - Giugno 14, 2021, 11:19:18 pm
Una buona partenza per ragionare sui vari formati di stringa può essere questo:

https://wiki.freepascal.org/Unicode_Support_in_Lazarus#String_Literals (https://wiki.freepascal.org/Unicode_Support_in_Lazarus#String_Literals)

Per ciò che riguarda Delphi il processo di standardizzazione Unicode è iniziato nel 2007 e non è ancora totalmente completato: i file sorgente per standard sono salvati in ansi per default, e addirittura i fineriga #10#13 possono provocare problemi se parzialmente presenti (ad esempio con solo #10 come da file provenienti da Linux).

Diciamo in generale che sviluppare un programma che lavori totalmente in unicode potrebbe presentare delle problematiche se non si parte con il piede giusto. In genere in questi casi si usa UTF8 come standard per tutto (salvatggio sorgenti, lettura e salvataggio dati).

Poi comunque ci sono i problemi legati all'interscambio dati con le api del SO o delle varie librerie usate.

EDIT: solo per esempio Windows se ricordo bene ha ancora alcune api non UNICODE, l'uso obbligatorio di widestring per le COM/OLE, e le stesse funzioni di accesso ai file non sono ancora totalmente compatibili unicode.

Ciao
Titolo: Re:testo percentuale x 1000
Inserito da: SB - Giugno 15, 2021, 07:38:09 am
Non farmici pensare  :'(
Non so come sia la situazione attuale, ma una volta in Windows c'erano (almeno) due versioni per ogni funzione API che aveva parametri stringa. Che caos
Inoltre di stringhe unicode ce ne sono almeno di due tipi, utf8 e utf16, e districarsi nella loro gestione, magari in un vecchio programma pensato per l'ascii, richiede una bella dose di sangue freddo.
Per non parlare del codice C e similari che lavorava sfruttando il parallelismo byte/carattere da cui adesso bisogna rifuggire come la peste