Newsgroup: it.comp.lang.visual-basic
Titolo: Scomporre barcode

Ciao a tutti,
dovrei fare un programmino che implementi delle regole di scomposizione di
un codice a barre passato.
In pratica devo rendere customizzabile da utente delle regole per cui dire
"prendimi dal carattere X a Y", oppure "prendi da dopo il secondo spazio
fino al 3 spazio" e cose del genere
Questo perch� i clienti passano dei codici a barre lunghi e composti, che
devo separare e posizionare nei giusti campi (articolo, lotto, data
scadenza ecc)
Se avete qualche hint per iniziare a definire delle regole, e/o quali
strumenti utilizzare. Immagino le regular expression, ma non le conosco
(posso studiarle comunque).


Ciao,
premetto che non mastico bene RegEx.
Il barcode ha (pu� avere) una lunghezza fissa predeterminata,
(usi l'EAN13?) quindi il numero "separazioni" possibili sono pittosto 
limitate (al massimo 7 blocchi per blocchi a lunghezza variabile e 13 
per blocchi a lunghezza fissa, sempre che usi l'EAN13)
Forse scomodare le Regular Expression in questo caso � eccessivo, 
potresti crearti una tabella di regole customizzate dall'utente (come 
hai immaginato nella tua richiesta).
Se per� vuoi andare sulle RegEx quin trovi un po' di info:
http://www.regular-expressions.info/
e anche in notepad++ � implementato un motore regEx.
ciao
stefano

 hai immaginato nella tua richiesta).
Alla fine non so che tipo di codice mi arriva, devo prevedere che un
barcode di un fornitore possa essere interpretato, in modo che l'utente
possa impostare delle regole di decodifica.
Una � sicuramente "da carattere a carattere", poi ci sar� "da delimitatore
a delimitatore" ecc.
Solo mi pare una cosa un po' "enorme" da implementare

 Solo mi pare una cosa un po' "enorme" da implementare
non la vedo cosï¿œ complessa, hai giï¿œ descritto tutta la logica di 
business, semplicemente realizzala :-)
Crei una "regola" che ï¿œ Valutabile e in fase di valutazione prende in 
pasto il barcode e restituisce il barcode di partenza e il suo 
risultato.
A questo punto non tiresta che prendere il risultato e passarlo alla 
regola successiva nello stack.
.m
-- 
ï¿œ corta

 regola successiva nello stack.
Io avevo pensato ad una classe, che dato il tipo di etichetta mi
restituisce un dictionary con i campi e relativi valori.
Dal chiamante riprendo questi valori e gli metto sulle mie caselle di testo
o dove serve.
Quindi avevo pensato ad una tabella
Etichetta:
  etichetta1
Ad una
EtichettaCampo dove indico
  etichetta1, campo, regole di estrazione, camposuccessivo (per sapere
quali campi contiene un etichetta)
Da qui dovrei essere in grado di far tutto.
Le regole di estrazione le far� via via che appaioni tipi di barcode nuovi.

 Devo salvare queste regole su un DB, ï¿œ lï¿œ che un po' ci sto pensando :)
ma devi dare all'utente un editor per le regole?


 ma devi dare all'utente un editor per le regole?
Diciamo che lo possiamo fare anche noi, del tipo l'utente ci dice che ha un
barcode di tipo nuovo e noi dobbiamo far si che il suo programma sia in
grado si spacchettarlo come deve.
Pensavo anche a fare delle classi di interpretazione
Classe CampiDimensioneFissa
Classe CampiSeparatori
Ognuna con le propriet� che servono per estrarre (es. inizio, fine, o i
parametri dell'Instr nel caso di quella a separatori ecc.)
E poi serializzare/deserializzare queste informazioni.
Solo che mi sembra davvero troppo per un "programmino" che deve
semplificare il carico di magazzino con i barcode dei fornitori.

 semplificare il carico di magazzino con i barcode dei fornitori.
anche secondo me, se l'utente non ha un editor ma passa da voi perchï¿œ 
non una banalissima dll?
crei una o piï¿œ dll che contengono una o piï¿œ classi che implementano una 
tua interfaccia tipo IBarCodeRule e con MEF in un nanosecondo carichi 
le regole e ci fai quello che vuoi.


 le regole e ci fai quello che vuoi.
MEF se non erro � fwk4? Io devo girare su WindowsCE/WindowsMobile (palmari
aziendali) ci girerebbe? (permesso che MEF non so neanche che sia se non la
wiki-definizione :D)

 wiki-definizione :D)
no, ma per quello che devi fare ci vogliono 20 righe di codice 
banalissimo e quindi puoi farlo girare ovunque :-)


 (posso studiarle comunque).
 
Ciao,
noi in azienda implementiamo una logica simile per il caricamento di flussi bancari.
Libera la tua mente dall'idea del barcode.
 
A te in input arriva una stringa, e basta.
A questo punto devi hai due vie: è un delimitato (e quindi vai di Split) o è un posizionale alla cobol.
Nel secondo caso ti crei un file guida contenente tutte le regole necessarie a prendere i dati.
 
Ad esempio
 
Pippo     Pluto   Paperino 00000523520110530
 
Potrebbe essere, da file guida:
CHAR(10) --> "Pippo     "
CHAR(8) --> "Pluto   "
CHAR(9) --> "Paperino "
9(6)V9(3) --> 000005235 --> 5.235
YYYYMMDD --> 20110530 --> 30/05/2011
 
Con un pò di regex te la cavi.
 
Ciao,
 
Nicola

 necessarie a prendere i dati.
 
Sono andato un po' avanti e vi aggiorno. Non ho utilizzato le REGEX, ho
preferito muovermi su quello che conosco.
 
Ho strutturato un'interfaccia IBarcodeInfoExtract.
Ho scritto 3 classi che la implementano, con vari proprietà per il
funzionamento.
 
La prima banale è l'estrazione da carattere/lunghezza (la substring)
La seconda è anche banale ed è l'estrazione a campi separatori (split)
Ne ho fatta una terza più complessa, che permette di definire l'inizio e la
fine estrazione, che può essere a posizione fissa o a carattere variabile.
 
Teoricamente sto prevedendo che per decodificare una stringa si possano
chiamare più di uno di questi estrattori a cascata.
 
Ora sto scrivendo il "contorno", e poi va in test. Se tutto va bene mappo
le proprietà delle classi in campi del database.