Newsgroup: it.comp.lang.delphi
Titolo: Ordinamento Stringhe numeriche

Ciao a tutto il NG.
qualcuno mi sa dire come evitare che 
ordinando una colonna di soli caratteri numerici, 
Ma di tipo stringa in una tabella .dbf,
(usando il BDE)  si verifichi la sequenza :
10
100
1000
Mentre invece vorrei ottenere l'ordinamento 
come se i campi fossero integer, e cioè :
10
11
100
101
ecc..
grazie a chi mi vorrà rispondere.
 
ciao a tutti.
g.devil
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

ecc..
Ciao,
credo che dovresti prima normalizzarli i valori da ordinare, esempio, la 
cosa più semplice è quella di aggiungere degli zero all'inizio del 
numero. 10 diventa 0010, 101 diventa 0101 e cosi via.
Ciao da Enrico Giudici
ico...@tiscali.it
--- posted by geoForum on 
http://www.delphiedintorni.it

 CUT
Ti ringrazio per la risposta, ma.. 
non posso modificare i dati in oggetto.
ciao.
gdevil


 
usando un campo calcolato?
ciao
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

 usando un campo calcolato?
 
  Se ho interpretato bene intendi :
  usare un nuovo campo calcolato che sia numerico vero?,
  se č cosě non č possibile poichč (e mi scuso di non averlo precisato)
  il campo originale puň contenere anche caratteri es :
  "123A45d345" oppure "abcdegsfs" oppure "12345678".
 
 
 ciao.


    
facciamo un esempio
le stringhe
"ciao"
"Ciao"
"100"
"001"
"111a"
"aa11"
"01"
come dovrebbero essere ordinate?
la logica direbbe di default:
"001"
"01"
"100"
"111a"
"Ciao"
"aa11"
"ciao"


Puoi crearti un indice basato sulla espressione val(campo).
Giovanni Caramia

 Giovanni Caramia
  scusa la mia ignoranza ma cosa intendi esattamente?


   scusa la mia ignoranza ma cosa intendi esattamente?
Le tabelle .DBF accettano chiavi costruite su:
- un campo
- una combinazione di campi
- funzioni sui campi e loro combinazioni
as esempio supponiamo di avere una tabella così formata:
codice 		carattere(10)
qta    		numerico(10)
prezzo 		numerico(10)
previsione 	carattere(10) 
(e supponiamo che il campo 'previsione' contenga valori numerici per
riferirci al tuo caso)
puoi crearti ad esempio chiavi basate su:
A- codice (chiave basata su un singolo campo)
B- codice + previsione (chiave basata su più campi concatenati)
C- codice + str(qta) (chiave basata su un campo + il risultato di una
funzione)
 
D- val(previsione)   <<<---- questo è il tuo caso (chiave basata su
una funzione)
 
E- qta*prezzo (chiave basata su operazione tra campi)
ecc. ecc.
Una volta che la tua tabella ha la chiave che ti interessa, potrai
utilizzarla liberamente in Delphi/BDE  indicando il suo nome nella
proprietà 'IndexName' della tabella.
torniamo al nostro esempio:
supponiamo che la tabella contenga i seguenti valori in ordine di
inserimento:
codice		qta		prezzo		previsione
C		100		50		7
D		20		70		6
B		30		10		6000
A		40		20		600
attivando la chiave D li vedrai così:
D		20		70		6
C		100		50		7
A		40		20		600
B		30		10		6000
attivando la chiave E li vedrai così: (ovviamente converrebbe
aggiungere un campo calcolato per vedere anche il risultato del
prodotto)
B		30		10		6000
A		40		20		600
D		20		70		6
C		100		50		7
ecc..
Per gestire la tabella DBF puoi usare il DataBaseDeskTop oppure, se
hai Dbase, proprio con lui indifferentemente che sia la versione a
caratteri DOS o una di quelle windows.
Ciao
Giovanni Caramia

   scusa la mia ignoranza ma cosa intendi esattamente?
Dopo aver postato mi sono accorto che hai aggiunto che il campo può
contenere anche caratteri alfabetici. In tal caso la chiave deve
essere formata in questo modo:
str(val(previsione))+previsione
l'unico inconveniente è che nell'ordinamento ti ritrovi prima i campi
che iniziano con una lettera e poi quelli che iniziano con una cifra.
Ma non si può voler tutto dalla vita..
o magari, pensandoci su e provando si ottiene anche qualcosa di meglio
di quanto ti ho proposto.
Ciao
Giovanni Caramia

 di quanto ti ho proposto.
E pensandoci.... se formi la chiave in questo modo:
iif(asc(previsione) > 64,
"9999999"+previsione,str(val(previsione))+previsione)
ottieni proprio quello che vuoi; ovvero separi le stringhe che
iniziano con una lettera da quelle che iniziano con una cifra e fai in
modo che le prime siano assoggettate ad una formulazione di chiave
tale da metterle in coda alle seconde.
E con questo credo di aver risolto completamente la tua esigenza.
Ciao - Buon lavoro
Giovanni Caramia