Come si fa modificare un record in un file sequenziale in Cobol??
Come si fa modificare un record in un file sequenziale in Cobol??
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.
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.
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.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!
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
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
Puoi annidare quante perform vuoi, l'unico intoppo è che se esageri il programma rallenta un pochetto
Spero di esserti stato d'aiuto. Se ho capito male o mi sono espresso male ignorami e scusami.
Ciao Fratè.
Dalla vita altrui attingeva la sua oscura magia...
Membro del Sacro Ordine degli elfi oscuri di Kand