PDA

Visualizza la versione completa : File sequenziali Cobol


clapap
23-09-2002, 16:39
Come si fa modificare un record in un file sequenziale in Cobol??

:dh: :dh:

Johnny_Depp
23-09-2002, 17:55
non ti conviene utilizzare un organizzazione di tipo INDEXED???

cmq guarda qua:

http://web.tiscali.it/nunzio_brug/program.htm

i file sequenziali sono trattati dall'unit 23 in poi...

Se poi vuoi sapere qualcos'altro fammi sapere

Ciao.

fantasma313
23-09-2002, 23:14
Allora premetto che non mi ricordo bene, non lavoro con file da anni.

Il metodo + semplice e leggere il file sequenzialmente read nomefile(nome che hai dato nella fd) [into area.appoggio] ecc ecc e scrivere un file in output modificando il record da te scelto... fino alla fine.

Per il consiglio che ti do utilizza file indicizzati, + veloci e anche + facile da trattare per le modifiche.

fammi sapere se hai bisogno di qualcos'altro.

clapap
24-09-2002, 10:10
ma il cobol ha problemi ha cresare un ciclo in un'altro ciclo?
perform until [ ]
..
..
perform until [ ]
..
..
end-perform
..
end-perform


A me sembra che mi faccia casini!

elfocaotico
25-09-2002, 11:03
Originariamente inviato da clapap
ma il cobol ha problemi ha cresare un ciclo in un'altro ciclo?
perform until [ ]
..
..
perform until [ ]
..
..
end-perform
..
end-perform


A me sembra che mi faccia casini!

Confermo che per modificare un file sequenziale necessario leggerlo e scriverne un altro. Un file sequenziale, non essendo indicizzato, non contiene chiavi e tutte le informazioni relative ai dati in esso contenuto. E' puro testo.
Se usi INDEXED cambia tutto in quanto nel file indicizzato (.vix) vengono indicate tutte le informazioni sulle chiavi e posizione dei records.
In poche parole.... un file sequential non pu essere modificato come vorresti te, devi leggerlo tutto e, con gli opportuni tests, riscriverne un altro :fagiano:

Perform

Assulatamente no!!!
L'importante che ne rispetti la struttura, cio che la logica sia:
Perform LABEL ------> Esegue la label e ritorna
Perform LABEL thru FINE-LABEL ---> Esegue le istruzioni da LABEL a FINE-LABEL.

Se usi "Perform LABEL", nel caso volessi uscire da LABEL per scartare le altre righe devi usare EXIT PARAGRAPH.

Se usi "Perform LABEL THRU FINE-LABEL" per uscire e scartare le righe successive devi usare GO TO FINE-LABEL.

Altro caso....
Perform until CONTATORE = 10
CONTATORE = CONTATORE + 1
if CONTATORE = 7
exit perform
end-if
display CONTATORE
End-perform
In questo caso usi un ciclo senza label e per uscire dal ciclo prima che si verifichi "CONTATORE = 10" devi usare exit perform.

Questo il riassunto. Se non vengono rispettate queste 3 logiche delle perform .... eb.... il programma (soprattutto su grosse elaborazioni) perde il filo e non s + quali righe eseguire :biifu: :biifu:

Puoi annidare quante perform vuoi, l'unico intoppo che se esageri il programma rallenta un pochetto :sonno:
Spero di esserti stato d'aiuto. Se ho capito male o mi sono espresso male ignorami e scusami.

Ciao Frat.:ciauz:

Loading