Nella tua funzione ho fatto una piccola modifica per trovare l'errore
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
DIM sum, i AS Integer
DIM chars AS String
'Compute the modulo 43 checksum
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
sum = 0
FOR i = 1 TO Len(code)
sum += InStr(chars, Mid(code, i, 1))
NEXT
i = sum MOD 43 <---- Stop del programma per visualizzare il risultato
STOP
RETURN Mid(chars, sum MOD 43, 1)
END
Premesso che io non so cosa sia e a che cosa serva MOD ma ho visto che sum ha valore 86 e i prende un valore di 0
Quindi quando tu fai un Mid(chars,0,1) genera errore perche' deve almeno avere valore 1 sia la partenza che la lunghezza.
Spero di esserti stato di aiuto :)
L'avevo intuito, ma non avendolo mai usato non volevo fare il gradasso :)
Ritornando alla funzione di pdfwriter, credo che sia da modificare in questo modo:
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
DIM sum, i AS Integer
DIM chars AS String
'Compute the modulo 43 checksum
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
sum = 0
FOR i = 1 TO Len(code)
sum += InStr(chars, Mid(code, i, 1))
NEXT
RETURN Mid(chars, (sum MOD 43) +1 , 1)
END
prima cosa per evitare un ritorno di valore zero e secondo perche' il carattere '%' non verrebbe mai selezionato...
Nella tua funzione ho fatto una piccola modifica per trovare l'errore
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
DIM sum, i AS Integer
DIM chars AS String
'Compute the modulo 43 checksum
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
sum = 0
FOR i = 1 TO Len(code)
sum += InStr(chars, Mid(code, i, 1))
NEXT
i = sum MOD 43 <---- Stop del programma per visualizzare il risultato
STOP
RETURN Mid(chars, sum MOD 43, 1)
END
Premesso che io non so cosa sia e a che cosa serva MOD ma ho visto che sum ha valore 86 e i prende un valore di 0
Quindi quando tu fai un Mid(chars,0,1) genera errore perche' deve almeno avere valore 1 sia la partenza che la lunghezza.
Spero di esserti stato di aiuto :)
milio milio milio....devo bacchettarti ora...mi crei un componente da zero e poi mi cadi su MOD???
Mod restituisce il resto di una divisione....si vede che non leggi il mio blog!!!! :P
ho la 2.19 (con il nuovo avatar sembri un nubbio, non è che ti sei ringiovanito troppo?
per la riga incriminata l'avevo già individuata solo che non riesco a capire perchè dà errore.
@milio
quella funzione era già presente in pdfwriter e non sono riuscito a capire perchè l'autore perchè l'autore usa sum e mod (86 / 43 = 0) ma questo succede solo con 78/10
cmq ho parzialmente risolto aggiungendo dei caratteri in
vecchio
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
nuovo
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. :()&$/+%"
pero mi piacerebbe capire il perchè dell'errore sia per conoscenza informatica sia per evitare che in futuro mi si blocchi su un'altro numero
L'errore viene dato perché 86 MOD 43 (86 è il valore di sum che genera l'errore) dà 0 come resto della divisione e Mid non accetta un punto di inizio che sia uguale a 0!
Ricordo che la sintassi di Mid è:
Mid(Stringa, punto_di_inizio, numero_di_caratteri)
Mid(char, 0, 1) dà quindi errore. Inoltre se numero_di_caratteri è 1, si può anche omettere.
Ancora un altro inoltre... Se si deve prendere un solo carattere si può usare Left(stringa, posizione) che preleva dalla stringa il carattere in posizione "posizione". Ma anche qui serve un valore di 1 o superiore.