Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    3

    Trasformazione di stringe in VB

    Scusate, qualcuno sa dirmi come posso fare il seguente procedimento in Visual Basic?

    Io sono in possesso di un file ke è strutturato in questo modo:

    LOAD,@B,N1,R001,C1234567890123,P000000133,:PROVA COD ;
    LOAD,@B,N1,R001,C1234567890123,P000000133,:PROVA PROD;
    LOAD,@B,N1,R001,C3210987654321,P000001000,:ETICHET TE ;

    per caricare una riga alla volta e poi trasformarla in questo modo:
    123456789012:00000133:01:PROVA COD;
    cioè
    LOAD,@B,N1,R0 scompare
    01 si sposta
    C scompare
    dopo la c si prendere i primi 12 numeri
    P scompare
    e poi si prende gli ultimi otto dopo la p e si dispone tutto come vi ho fatto vedere.

    Poi mi crea un nuovo file .dat

    Si può fare? Mi date una mano?

    Grazie!
    {-Blade-}

  2. #2
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    e facile da realizzare, però devi dirmi se stai lavornado in VB o VB.NET

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    3
    Lavoro in Visual Basic 6.0 Professional Edition
    {-Blade-}

  4. #4
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    ok, allora in un modulo .BAS esterno al form ti crei una struttura personalizzata con campi a lunghezza fissa utilizzando la parola chiave TYPE e poi ti calcoli le dimensioni dei singoli "record" da tirare fuori dal tuo file.

    Per esempio
    codice:
    Type MiaStruttura
      dim strA as string * 13
      dim strB as string * 2
      dim strC as string * 2
      dim strD as string * 12
      dim strE as string * 2
      dim strF as string * 8
      ...fino alla fine della riga del file da cui leggi
    End Type
    e adesso ti spiego cosa vuol dire:

    la prima stringa conterrà i valori della prima riga del tuo file partendo dalla L di LOAD, quindi conterrà: LOAD,@B,N1,R0, cioè i primi 13 caratteri

    la seconda invece conterrà : 01 che sono i successivi 2 caratteri partendo dalla stringa precedente e così via.

    Ti devi creare una specie di "maschera" che contenga i pezzetti di testo che ti interessa e poi usi nel tuo programma le variabili create nella TYPE per ricreare la stringa che ti interessa.

    Per leggere il file e mettere i valori nella tua TYPE usa:

    codice:
    'Apri il file
    dim MiaStr as MiaStruttura
    while not EOF(NumFile)
       Get(NumFile, MiaStr)
       dim NewString as string
       NewString = MiaStr.strA & MiaStr.strF & MiaStr.strE
       Print #SecondoFile, NewString
    End While
    Chiudi i file
    attento però per funzionare è necessario che le righe del file da cui leggi siano uguali come numero di caratteri in modo tale da poter mettere nelle tue variabili a lunghezza fissa i valori che leggi carattere per carattere.

    Spero di essermi spiegato...fammi sapere, ciao!

  5. #5
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Una piccola annotazione:
    Il ciclo DO WHILE NOT EOF(NumFile)....LOOP, non funge con i file aperti random.

    Devi fare un ciclo FOR...NEXT tante volte quanti sono i record nel file.

    Per saperlo, basta che dividi la lunghezza del file (LOF(NumFile)-1) per le dimensione della tua variabile Type (Len(MiaStruttura)).


    ...miiiii le risposte stereofoniche!!!!
    ...and I miss you...like the deserts miss the rain...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    3

    Aeeeee

    Grazie per la vostra disponibilità.

    Siccome io uso VB praticamente per la prima volta, non è ke mi potreste spiegare un pò più nel dettaglio, per esempio dove devo mettere il codice, come faccio a aprire il file, etc...

    Grazie mille in anticipo!
    {-Blade-}

  7. #7
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da vonkranz
    Una piccola annotazione:
    Il ciclo DO WHILE NOT EOF(NumFile)....LOOP, non funge con i file aperti random.

    Devi fare un ciclo FOR...NEXT tante volte quanti sono i record nel file.

    Per saperlo, basta che dividi la lunghezza del file (LOF(NumFile)-1) per le dimensione della tua variabile Type (Len(MiaStruttura)).


    ...miiiii le risposte stereofoniche!!!!
    quello che dici è vero e ti toglie dai casini che potrebbero derivare dalla non corretta interpretazione del carattere di EOF incluso nel file.

    Ti posso garantire che se il file risulta "pulito" in coda il While Wend (no Do while Loop) ti funziona a meraviglia.

    Cmq io uso la tecnica che hai detto tu, ma mi sembrava + semplice fargli questo esempio per fargli capire intanto il meccanismo delle Type...se poi nascevano problemi avremmo risolto

  8. #8
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da darkblOOd
    ....Ti posso garantire che se il file risulta "pulito" in coda il While Wend (no Do while Loop) ti funziona a meraviglia.
    .....
    Ma se il GET "deborda" oltre la fine del file, viene intercettato ugualmente l' EOF?
    ...and I miss you...like the deserts miss the rain...

  9. #9
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da vonkranz


    Ma se il GET "deborda" oltre la fine del file, viene intercettato ugualmente l' EOF?
    no, che c'entra. I record devono essere uguali, non possono variare uno dall'altro. Come fa a debordare? Debordi solo se sbagli a dichiarare le variabili nella type e metti 1 byte in + o in - altrimenti non deborda, sempre ammesso che riconosca il carattere EOF altrimenti "impossibile leggere oltre la fine del flusso" (o del file)


  10. #10
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Originariamente inviato da darkblOOd

    sempre ammesso che riconosca il carattere EOF altrimenti "impossibile leggere oltre la fine del flusso" (o del file)

    Ma a me e' capitato (avevo incasinato la struttura del Type) che facendo un GET che andava oltre la fine del file, il ciclo anziche andare in errore, continuava a riempirmi i campi del Type con dei valori a caso.
    Non ho mai provato a vedere cosa succedeva se leggevo "perfettamente"
    ...and I miss you...like the deserts miss the rain...

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.