PDA

Visualizza la versione completa : Trasformazione di stringe in VB


{DF}
23-07-2002, 17:25
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!

darkblOOd
23-07-2002, 17:32
e facile da realizzare, però devi dirmi se stai lavornado in VB o VB.NET

{DF}
23-07-2002, 17:42
Lavoro in Visual Basic 6.0 Professional Edition

darkblOOd
23-07-2002, 18:08
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


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:



'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!

vonkranz
23-07-2002, 18:18
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!!!! :D

{DF}
23-07-2002, 18:30
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!

darkblOOd
23-07-2002, 18:33
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!!!! :D

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 ;)

vonkranz
23-07-2002, 18:38
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?

darkblOOd
23-07-2002, 19:00
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)

:)

vonkranz
23-07-2002, 19:12
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"

Loading