Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    9

    Verifica corrispondenze con hash

    Salve a tutti,

    problema: ho un hash che ha come chiavi delle lettere e come valori dei numeri. Ho la necessità di verificare se, dato un input da tastiera e memorizzato lo stesso in un array, i valori dell'array corrispondono ad una chiave ed in caso affermativo assegnare il valore della chiave in una nuova variabile. Lavorando con un

    if ($var_array[x]==$key){
    $value=$valore1;
    }

    non trova mai la corrispondenza.
    Ho provato anche a modificare l'if con un matching ma il risultato è sempre negativo.
    Come posso fare?

    Grazie,
    zeno78

  2. #2
    a parte che se si tratta di lettere devi usare:

    if ($var_array[x] eq $key){
    ...
    }

    ma poi il resto non ha molto senso. Cosa è $valore1?
    come ricavi $key?

    meglio che posti più codice.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    9
    Ciao Shishii,

    prima mi spiego meglio e poi posto anche il codice.
    Lo script che sto facendo serve a calcolare il codice fiscale. Nell'algoritmo per il calcolo del cod. fis. l'ultima lettera, definita lettera di controllo, si deve calcolare seguendo una stupida procedura che consiste nel prendere i caratteri pari e quelli dispari del codice che è stato ottenuto fino a quel momento e confrontarli con 2 tabelle. Le tabelle sono fatte tipo così: (a=1 b=2 c=3 etc, etc.). Dunque, ad ogni carattere (che può essere una lettera oppure un numero) bisogna associare la corrispondente cifra riportata in tabella e poi effettuare altre operazioni.
    Io ho riportato le tabelle in un hash che è fatto così:
    %tab_a=('A'=>'1',
    'B'=>'2',
    etc, etc);
    invece i caratteri pari e dispari si trovano in un unico array. Nel momento in cui arrivo a calcolare la lettera di controllo devo prendere i singoli elementi dell'array e confrontarli con le due tabelle di cui parlavo sopra, in modo da ottenere tanti numeri quanti sono i caratteri.
    Per fare questo uso la seguente subroutine (non la posto tutta perchè tanto è inutile):

    sub calcolo_lettera_controllo{
    #controlla i caratteri pari
    while (($chiave, $valore)=each(%tab_a)){
    if ($array[1] == $chiave){
    $valore=$corrispondenza1;
    }
    if ($array[3] == $chiave){
    $valore=$corrispondenza2;
    }
    etc.etc.
    }
    }

    La necessità di portare il valore in una nuova variabile è data dal fatto che per il calcolo definitivo della lettera di controllo devo sommare i numeri ottenuti dal confronto dei caratteri cn la tabella.
    Quanto mi dicevi in merito a eq al posto di == nell'if... ho provato a cambiare == con eq ma cmq nn ottengo alcun risultato.

    Ciao,
    zeno78

    P.S.Grazie per la disponibilità.

  4. #4
    il fatto che il confronto tra due lettere o due stringhe va fatto tramite "eq" e NON tramite "==", non è una mia opinione, è una necessità ASSOLUTA.

    poi tu scrivi:

    La necessità di portare il valore in una nuova variabile...
    ma con
    codice:
    $valore=$corrispondenza1;
    NON porti il "valore" in "corrispondenza1", ma fai l'esatto contrario.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    9
    Wow che figata!

    Shishii cn i tuoi insegnamenti adesso ho un codice che funziona. Devo "solo" correggere alcuni piccoli frammenti di codice in modo da inserire qualche controllo in più sull'input dell'utente e poi sarò pronto a ricavare i codici fiscali anche sul mio amato desktop GNOME senza essere connesso ad internet!
    Come sempre, GRAZIE!
    Ciao,
    zeno78

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