Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [VB6] Programmino per file txt

    Buongiorno a tutti!!!
    Mi è stato commissionato un compitino per nulla facile, almeno per me:
    creare un programmino che apra un file TXT strutturato così

    GRADING ;500040810006000401 ;05022003:120818;000001.00
    GRADING ;510012050007000400 ;05022003:115428;000001.00
    GRADING ;510019640002000200 ;05022003:115354;000001.00
    GRADING ;510020280005000100 ;05022003:115245;000001.00
    GRADING ;510028050001000100 ;05022003:114218;000001.00
    GRADING ;510028050002000100 ;05022003:114228;000001.00
    GRADING ;510028050003000100 ;05022003:114224;000001.00

    La prima colonna è la location dell'oggetto; dopo il primo punto e virgola c'è il barcode e dopo il secondo punto e
    virgola la time stamp, che a me non interessa.
    Quello che il programma deve fare è "leggere" il file TXT, facendomelo vedere, se possibile, cancellare eventuali
    righe doppie, quindi barcode doppi, e fermarsi quando incontra errori nel barcode, tipo lettere al posto dei numeri
    o numeri marcanti, per permettermi di correggere l'errore. Molto importante è il fatto che eventuali barcode doppi possono non essere contigui, quindi ne può capitare uno all'inizio e uno alla fine.

    E' possibile fare un programmino del genere???

    Grazie a tutti coloro che mi illumineranno la giusta via!!!

  2. #2
    Il programma è sicuramente fattibile ma richiede l'appoggio di un archivio supplementare nel senso che le operazioni che puoi fare in fase di lettura sono quelle di controllo sui dati appena letti (controllo di validità e formale del barcode) quello che invece non puoi fare è la verifica di barcode doppi.
    Per verificare la presenza di barcode doppi devi inserirli in una tabella (dove il campo barcode è definito come campo chiave) a patto che non esistano già.

    Le operazioni quindi possono essere:

    - leggo record da file txt
    - verifico che sia formalmente corretto
    - ricerco in tabella il barcode, se non esiste lo inserisco altrimenti do una segnalazione

    Un ultimo consiglio, non interrompere l'elaborazione a causa di un qualsiasi problema ma segnala l'anomalia (anche in un file txt) ma prosegui fino alla fine e solo allora analizzerai le anomalie che hai riscontrato.

    Ciao

  3. #3
    Quindi tu dici che sarebbe meglio una sorta di importazione del file txt in una tabella access in modo da poter controllare così anche i barcode doppi???

  4. #4
    No, non importerei il file txt in access ma elaborerei il file sequenziale per un primo controllo formale dei barcode (e/o altri campi) e solo a controllo superato testo se il barcode esiste in tabella, se non esiste lo inserisco altrimenti lo segnalo come barcode doppio.
    Chiaramente le strade sono molte, puoi benissimo imporate il file in access e con una query evidenziare i barcode doppi ma eviterei questo metodo in quanto importeresti anche le informazioni errate.
    Ciao

  5. #5
    Ti prego di perdonarmi ma con txt non ho mai lavorato.

    Ti chiedo un'altra cosa:

    tante volte hai delle parti di codice da potermi inviare così da potermele studiare e capire meglio quello che tu dici???

    Te ne sarei infinitissimamente grato.

    Grazie e a presto

  6. #6
    Per il file sequenziale lo apri, leggi e chiudi nel seguente modo:

    open "tuofile.txt" for input as #1
    while nor eof(1)
    line input #1,campo$
    rem routine di controllo
    wend
    close #1

    nel tuo caso il campo$, ad ogni lettura, contiene una riga del tuo file.
    es. "GRADING ;500040810006000401 ;05022003:120818;000001.00"
    a questo punto, ed è forse la parte più complessa, devi fare una routine che controlli la stringa.
    Se la stringa risulta essere corretta accedi alla tabella di access ricercando il barcode.

  7. #7
    E fin qui tutto OK.

    Il problema è fargli controllare 7 lettere, uno spazio, un punto e virgola e poi 18 numeri a caso; soprattutto deve controllare che in quei 18 numeri non siano presenti lettere o altri caratteri che non siano numeri e che siano 18 numeri.

    Come posso strutturare la routine al quale avevo pensato anche io ma non riesco a fare??

    Avevo ipotizzato una sorta di ciclo che legge la riga, controlla che sia composta da 7 lettere, una spazio, ecc ecc, controlla che i numeri siano 18 e che siano 18 numeri; se tutto questo è corretto, va alla riga successiva???

    E' un bordellooooooooooo!!!!!!!!!!!

    Se puoi aiutarmi te ne sarei grato!!!

  8. #8
    Utente di HTML.it L'avatar di cik
    Registrato dal
    Jul 2003
    Messaggi
    449
    piccolo suggerimento

    - cerchi il primo ; (funzione instr)
    - se non è in 8 posizione -> errore
    - altrimenti
    - ciclo sui primi 7 caratteri
    - estrai dalla stringa una lettera per volta (funzione mid)
    - se è >="a" e <="z" oppure <"A" e <="Z" è una lettera
    - l'ottavo carattere deve essere =" "

    - cerchi il ; dopo il primo
    - se la differenza non è 18 -> errore
    - altro ciclo dal ; in poi per 18 caratteri
    - estrai un carattere
    - se è >="0" e <="9" è un numero

    -fine

    non sarà ottimizzato ma funziona
    S'i fosse foco, arderei 'l mondo

  9. #9
    Grazie ragazzi!!!

    Come al solito siete grandissimi!!!

    Grazie a tutti coloro che mi hanno aiutato e che continueranno a fare ciò, continuando ad inserire idee su questo messaggio!!!

    Grazie ancora e buon lavoro a tutti!!!


  10. #10
    Domandina per vitren54:

    nella parte dei codice che mi hai postato, mi hai inserito per tre volte #1: cosa indica???

    Lo hai inserito dopo

    "for imput as #1"

    poi

    "line #1, campo$"

    e infine

    "close #1".

    Scusami ma ultimamente il mio cervelo svalvola e non riesco a capire l'utilità di tale inserimento.

    Grazie e scusami ancora!!!

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.