Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Ordine del carattere ' (apice) diverso secondo Access e javascript

    Da una pagina Asp carico in una <select dei comuni mettendoli in ordine con una query in Access. Per esempio:

    ***
    0) SANTA TERESA
    1) SANTADI
    2) SANT'ANDREA FRIUS
    ***

    In un vettore metto pure i comuni ordinati (così creo io) in ordine alfabetico



    codice:
    var ComboBox1_vettore = ["SANTA GIUSTA","SANTA MARIA COGHINAS","SANTA TERESA GALLURA","SANTADI","SANT'ANDREA FRIUS","SANT'ANNA ARRESI","SANT'ANTIOCO","SANT'ANTONIO DI GALLURA","SANTU LUSSURGIU"];
    Adesso, ho una procedura che fa una ricerca binaria nel vettore


    Non funziona nulla ed ho scoperto che per javascript, "A" > "'" è vero, mentre per Access è vero il contrario

    Allora, chiedo, è possibile mettere daccordo javascript ed Access per quanto riguarda l'ordine del carattere A e ' ? :master:

    Pietro

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Access opera un ordinamento "alfabetico" e non tramite i codici ascii... non ti rimane che riscriverti i criteri di ordinamento in javascript:

    codice:
    <script>
    Access = String.fromCharCode( 32, 127, 129, 141, 143, 144, 157,
    	39, 45, 173, 150, 151, 160, 33, 34, 35, 36, 37, 38, 40, 41,
    	42, 44, 46, 47, 58, 59, 63, 64, 91, 92, 93, 94, 136, 95,
    	96, 123, 124, 125, 126, 161, 166, 168, 175, 180, 184, 191,
    	152, 145, 146, 130, 147, 148, 132, 139, 155, 43, 60, 61,
    	62, 177, 171, 187, 215, 247, 162, 163, 164, 165, 167, 169,
    	172, 174, 176, 181, 182, 183, 134, 135, 149, 133, 137, 128,
    	48, 188, 189, 190, 49, 185, 50, 178, 179, 51, 52, 53, 54,
    	55, 56, 57, 97, 65, 170, 225, 193, 224, 192, 226, 194, 196,
    	228, 227, 195, 229, 197, 198, 230, 98, 66, 99, 67, 199,
    	231, 68, 100, 208, 240, 69, 101, 233, 201, 200, 232, 202,
    	234, 203, 235, 70, 102, 131, 103, 71, 72, 104, 105, 73,
    	237, 205, 236, 204, 238, 206, 207, 239, 106, 74, 107, 75,
    	108, 76, 77, 109, 78, 110, 241, 209, 79, 111, 186, 243,
    	211, 242, 210, 212, 244, 246, 214, 245, 213, 248, 216, 140,
    	156, 80, 112, 81, 113, 82, 114, 115, 83, 138, 154, 223,
    	116, 84, 222, 254, 153, 117, 85, 250, 218, 217, 249, 219,
    	251, 220, 252, 118, 86, 119, 87, 88, 120, 121, 89, 221,
    	253, 159, 255, 90, 122, 158, 142 ); 
    
    function AccSort(aa,bb) {
    	ll=Math.min(aa.length,bb.length);
    	rv = 0;
    	for(var ii=0;ii<ll;ii++) {
    		rv = Access.indexOf(aa.charAt(ii)) - Access.indexOf(bb.charAt(ii))
    		if (rv!=0) break;
    	}
    	return (rv==0) ? aa.length-bb.length : rv ;
    }
    // da usare con:
    // ArrOrdinato = mioArr.sort(AccSort)
    </script>
    ( realizzato in mezz'ora... non garantisco ma gradisco segnalazioni )

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non credo che mi basterà mezzora . Per adesso, che non ho risolto, penso di lavorare lato server.
    In pratica, javascript considera 'Z < AA, e non mi va di metterci mano. Nel server ho 'Z < AA = true, giustamente, ma quando applico il metodo sort ad un vettore è esattamente il contrario. Sono sicuro che si possa risolvere :master: altrimenti, al posto di usare l'algoritmo di bisezione per cercare un elemento in una lista ordinata, userò il metodo di ricerca sequenziale, più lento ma funziona sempre
    Mi farò sentire. Ciao


    ps. mi sono accorto che non ho spiegato abbastanza bene
    In pratica, dal server mi costruisco un <select ed un vettore javascript ordinato, leggendo i dati da una tabella ed ordinandola nella query. Nell client ho una funzione che fa una ricerca binaria nel vettore ordinato. Il problema è che non è ordinato come lo intende js ma come lo intende il server. Le routine js non le voglio toccare perchè credo siano corrette, perciò lavorerò sul server. Un modo che ho visto funziona è quello di costruire un vettore parallelo che abbia la rappresentazione esadecimale degli item del vettore da ordinare :master: (non mi so spiegare meglio, scusami)
    Per funzionare funziona ma, speravo in qualcosa di più semplice
    Pietro

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    In effetti non era chiaro... ma puoi comunque usare la mia funzione per eseguire un confronto "alfabetico" sull'array creato lato server... ti basta sapere che la funzione restituisce un valore positivo o negativo dipendente dalla precedenza "alfabetica" dei due parametri o zero se uguali.

    L'ho provato anch'io per una ricerca dicotomica in un array ordinato e mi pare che non sbagli... inoltre considera giustamente che la lettera a, indipendentemente dal fatto che sia o meno maiuscola, precede la b... sempre.

    prova questo script e dimmi se ti pare logico...
    alert("a"<"B")
    alert("A"<"B")

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Innanzi tutto grazie della risposta.
    Purtroppo non ho guardato come si deve il tuo scritto (in fondo oggi è Festa ) e me lo studierò domani mattina.
    Comunque, il nocciolo della questione è che uso questa routine
    codice:
    /*----------------------------------------------------------------
    Trova il primo elemento della lista ordinata a il cui elemento
    inizia per x: restituisce -1 se non trova corrispondenza
    ----------------------------------------------------------------*/
    function FindLeft(a, x)
    {
    	var l = 0;
    	var r = a.length;
    	var w = 0; y = "", y1 = "", k = 0, k1 = 0;
    	
    	if(x == "") return -1;
    	x = x.toLowerCase( )
    	while(l <= r)
    	{
    		k = Math.floor((l + r) / 2)	;
    		y = a[k].substr(0, x.length).toLowerCase();
    		if(x <= y) r = k - 1;
    		if(x >= y) l = k + 1;
    		if(x == y) w = 1;
    	}
    	
    	if(w != 0)
    	{
    		k1 = k;
    		
    		while (true)
    		{
    			k--;
    			if(k < 0) break;
    			y = a[k].substr(0, x.length).toLowerCase();
    			y1 = a[k1].substr(0, x.length).toLowerCase();
    			if(y != y1) break; else k1 = k;
    		}	
    		return k1;
    	}
    	else 
    		return -1;
    }
    Il vettore ordinato è creato nel server e la ricerca è indipendente da maiuscolo-minuscolo. Anche so l'ho trasformata (non senza fatica) da Basic a js, credo che sia corretta. Naturalmente il vettore deve essere ordinato, altrimenti è chiaro che non funziona.
    Ora, è chiaro che bisogna prima studiare la tua risposta e poi, semmai, continuare il discorso :master: Ciao
    Pietro

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.