RESTRUCTURATEUR DE FICHIERS COBOL

drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005 - 30 août 2005 à 18:02
drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005 - 5 sept. 2005 à 20:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33544-restructurateur-de-fichiers-cobol

drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005
5 sept. 2005 à 20:36
Oops! j'ai mis : "la proscription du Goto par mon professeur"... je voulais en fait parler des return*s*... Comme quoi il ne faut pas écrire quand on a quelque chose d'autre en tête ^_^

Et en réponse à BugMaker : j'ai commencé la "programmation" avec les fichiers BATCH (les .BAT) sous DOS... Donc, on peut dire que j'en ai utilisé des GOTO*s*, et en quantité! (Ben oui: sous la version 6.22, on ne savait même pas faire de boucle! Ah! si j'avais connu Linux plus tôt...). Alors je n'ai rien contre les GOTO*s*...

Mais je dois quand même admettre qu'il est plus facile de se perdre et du prouire du code "spaghetti" avec des GOTO*s* qu'avec autre chose... Et je dis ça par expérience! Donc, à mon avis en tout cas,
"GOTO : seulement en cas d'urgence!"

PS : juste au cas où mon humour serait ENCORE pire que ce que je ne le pensait, je voulais dire par là qu'il vaut mieux les éviter tant qu'à faire, mais pas au point de devenir maniaque. A mon avis.
BugMaker Messages postés 34 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 février 2008
5 sept. 2005 à 20:01
salut,
ca n'est pas parce qu'un code est truffé de GOTO qu'il n'est pas lisible. j'ai programmé pendant 15 ans en cobol et on ne m'a jamais dit que mon code n'était pas lisible. on peut aussi faire du code "spagetti" sans utiliser un seul GOTO.
drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005
1 sept. 2005 à 18:58
Je suis d'accord avec le "le meilleur code sera celui qui arrive le plus vite au résultat escompté" s'il s'agit uniquement de programmation... En fait, le problème arrive pour les mise-à-jours et les modifications... Dans ce cas, c'est pas si mal d'avoir un code avant tout LISIBLE ^_^

Et pour Cyberboy2054 : je crois que j'ai une piste quant au pourquoi de la proscription du Goto par mon professeur (est-ce bien français, tout ça ?) : je ne suis qu'en première année (enfin... 2e maintenant) et vu que le niveau de la classe n'est pas très élevé (bel euphémisme s'il en est) ça pourrait expliquer qu'il insiste pour avoir des programmes ne comprenant qu'une rentrée et une sortie : plus simple et donc moins de risque d'erreur. Et c'est vrai que nous n'avons pas encore eu de programme "nécessitant" un système avec plusieurs return*s* (ou ... Goto*s*).
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 sept. 2005 à 16:19
Il n'y a rien à proscrire, suffit de répondre 'oui' aux censeurs tant qu'on y est obligé, ensuite le meilleur code sera celui qui arrive le plus vite au résultat escompté.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
1 sept. 2005 à 15:16
Je n'étais pas au courant que return était une instruction à proscrire, mais je suis curieux de savoir pourquoi.
Je l'ai pourtant croisé bon nombre de fois dans des sources que j'ai lues pour sortir prématuremment d'une fonction, et souvent cette solution apparaissait plus élégante que l'utilisation d'un goto ou autre...
drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005
31 août 2005 à 19:13
En réponse à Cyberboy2054 :

Oui, en effet, je savais que le Goto était à proscrire (la première chose qu'on nous apprend, c'est que le Goto est LA commande universelle par exellence, mais qu'il ne faut JAMAIS l'utiliser ^_^) ;
mais on m'avait aussi dit qu'il en était de même pour leS (attention au "S") return... Notre professeur insiste pour avoir UN point de départ et UN point d'arrivée... Et il était hors de question que je fasse 5 "IF-THEN-ELSE" imbriqués!

Enfin, je suis d'accord, la solution avec plusieurs return donne mieux...

Je m'en vais de ce pas modifer le code.

Merci du coup de main.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
30 août 2005 à 23:20
Juste 2-3 trucs que j'ai vu en lisant ta source.
Tu utilise à plusieurs reprise "goto erreur". On a sans doute déja du te dire qu'en C c'est une instruction à éviter d'utiliser, car dans la plupart des cas, elle provient d'une erreur de conception de la fonction qui la contient. Ici, tu t'en sers pour afficher un message d'erreur, puis sortir de la fonction car on se retrouve à la fin.
Pourquoi ne pas plutot remplacer
if (!(argc>1)) { err_num=1; goto erreur;}
par
if (!(argc>1))
{
printf("\nEt si vous précisiez un fichier, pour voir ?\n");
return 0;
}
Je trouve cela plus logique: "return" indique de manière explicite que l'on sort de la fonction, alors qu'avec goto il faut se balader dans le fichier pour retrouver la logique que tu as voulu imposer ...
Au passage, un truc que je n'ai pas compris, tu mets un code d'erreur (5, a la fin de la source), qui n'est pas present dans le switch de traitement des erreurs ... une erreur que tu aurais pu éviter avec ma méthode :p
Un dernier problème de logique:
!(argc > 1) == (argc <= 1) :p
On dit plus couramment "est inférieur ou égal à 1" que "n'est pas superieur à 1". Evidemment c'est pas grave mais c'est pas logique...
drdd Messages postés 7 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 5 septembre 2005
30 août 2005 à 18:02
J'ai oublié de préciser : le fichier .COB n'est PAS un fichier test COBOL (ce serait alors du .cbl) ; il s'agit du fichier de configuration (texte - facile à éditer en cas de problème) qu'il ne faut par ailleur pas oublier de référencer dans le code source avant de compiler (2 options par défaut sont proposée, une pour Microsoft, une pour LINUX)
Rejoignez-nous