Ils n'ont pas de noms, pas de numéros, ils sont exactement comme je l'ai présenté quelques posts au dessus, les ";" étant les séparateurs.Envoyé par Trap D
Ils n'ont pas de noms, pas de numéros, ils sont exactement comme je l'ai présenté quelques posts au dessus, les ";" étant les séparateurs.Envoyé par Trap D
C'est pas beauEnvoyé par ronan99999
Je préfère:
Et un switch est une bonne solution je pense...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 piVar = (int*) calloc(SIZE,sizeof(int)); if(!piVar ) return -1; /*traitement*/ return 0;
Si tu as un début de code à nous montrer (un bout à traiter et un bout de code implémenter sur le traitement...)
ce que je ferais (mais bon en soft il existe n solutions pour le mm pb) :
Une fonction de traitement qui prend en parametres l'indice du champ, et qui applique le formatage désiré :
Et une fonction qui détermine l'indice du champ (en supposant que taille = nb max de champ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <....> switch (indice) { case 1 : traitement 1 case 2 : traitement 2 .... }
La difficulté étant comment je sais que je réalise indice++ ou indice+=2...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 indice = 0; while (indice<taille) { /*on détermine si indice est incrémenté de 1 ou de plus (si champ =2) */ traitement(indice) }
Mais ca tu dois savoir le faire, même pour les goto.
Ta base de données est bien organisée en articles (des "lignes") comportant des champs séparés par des ";" non ?
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Ben voilà une idée qu'elle est bonne, je crois que je vais partir là dessus... (mince j'ai presque honte, c'est idiot en fait... pourquoi j'ai dit "presque"?). Au temps pour moi. Je m'en vais dormir un peu ce soir, on dirait que plusieurs mois de suite à récupérer des fichiers ça me réussit pas. bon ben merci à tous pour votre participation active, et à jack69 qui a la palme de la pertinence.Envoyé par jack69
Pour faire écho, ils peuvent (et pas doivent, attention !) être carrément cruciaux, notamment lorsque le langage ne supporte pas le concept d'exceptions !!!Envoyé par gege2061
C'est impératif, par exemple, pour réaliser une simili-clause "Try..Finally" en C.
Après, c'est comme tout : c'est "dangereux" à utiliser parceque l'on peut arriver à peu près n'importe où, que l'on ne peut pas "transférer" de variables au passage (sauf "globales" au bloc courant), et que le source est assez illisible. Ce n'est pas plus risqué que d'utiliser malloc ou fopen sans tester le résultat, mais je déconseille formellement aux débutants de s'amuser à tripatouiller le goto sans auparavant maîtriser les structures habituelles.
Le problème réel du goto en C n'est pas le nommage des étiquettes (because la portée est réduite), mais plutôt le fait de se planter sur la position de l'étiquette elle-même... En général, une ligne trop bas ou une ligne trop haut...
ulukahio : J'ai rarement vu un algorithme requérir impérativement des sauts inconditionnels, même à bas niveau (ASM), à l'exception notable de la gestion des erreurs. Et le source n'a jamais été significativement plus court (ni le code plus rapide) avec des goto...
Je suis plus enclin à penser que tu as un problème de conception, éventuellement au cran immédiatement supérieur de ton programme. Au vu de l'exemple que tu as fourni, ça me semble être un bête analyseur lexical plutôt simple à implémenter (parser + machine à état), j'avoue ne même pas comprendre où tu pourrais bien mettre des "goto" là-dedans... Mais tu ne nous as pas tout dit non plus, comme ce qu'il faut faire ensuite de ces champs (stockage en structure ? Texte ? Requête SQL ?)...
Toutefois, si tu n'as pas de notions de syntaxe/sémantique/traduction, alors effectivement, c'est normal que tu "patauges" un peu sur l'algo à choisir...
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Oui mais le problème était qu'il n'y avait pas le même nombre de ";" à chaque ligne, vu que si les champs n'étaient pas remplis, dans la bse on ne retrouvait pas un champ vide, mais pas de champ du tout.Envoyé par Trap D
Euh, ne t'emballe pas trop au sujet de ma pertinence. Ma solution est certainement une usine à gaz.
Mais bon, elle est surement mieux que des goto.
N'oublies pas le tag résolu si tu es satisfait....
Je crois que tu viens de mettre le doigt sur quelque chose d'important, En gros je n'en ai jamais entendu parler, et on m'a balancé des fichiers à récupérerToutefois, si tu n'as pas de notions de syntaxe/sémantique/traduction, alors effectivement, c'est normal que tu "patauges" un peu sur l'algo à choisir...
Et c'est fait pour le tag, mais jack, ta solution est effectivement plus claire que la mienne, même si c'est également une usine à gaz. ( de toutes façon, vu le nombre de champ ça v a être difficile pour un débutant de faire un truc tip top et qui marche)
Une simple remarque, tu n'as pas été très gaté par la personne qui t'a donné les fichiers à récupérer, car ne rien mettre du tout quand les champs sont vides c'est un peu dur pour un traitement de base de données
Je ne suis pas du tout expert en la matière mais ça me parait fort.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Tu peux faire une fonction de traitement pour chaque champ et les regrouper dans un tableau et ensuite appeler la fonction correspondantes au numéro du champ, ça évite le switch :
par exemple :
Appel par TabFonc[numero_champ - 1]();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int fn_champ1(void) { puts("champ 1"); return 1; } int fn_champ2(void) { puts("champ 2"); return 2; } typedef int (*MyFonc)(void); MyFonc TabFonc[] = {fn_champ1, fn_champ2, ......};
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
C'est ce que je me dis également . Quand j'ai dis à mon patron que certains champs n'étaient pas là, il voulait que j'arrête de travailler dessus.. Mais bon j'aime pas rester sur un échec alors j'ai continué comme un mulet . Mais je pense que je vais y arriver, et je pense que grâce à vous des gens pourront comprendre ce que j'ai écrit .Envoyé par Trap D
Mais bon c'est pas pire que la premiere base de données que j'ai du analyser, (la première fois que je voyais une base de données de ma vie haha), avec des champs cryptés, pas de séparateurs, des champs de taille variable... Une vraie horreur celle là aussi. Enfin on s'égare.
Sinon Mac LAK est ce que tu aurais par hasard un site ou je pourrai trouver des infos sur les analyseurs lexicaux? Pour l'instant sur google je trouve que des trucs pas terribles.
à tous les "Pros" du goto !!
1 - Je vous souhaite de ne pas avoir à debugger un programme truffé de ces petites betes
2 - personnellement je n'ai jamais eu , plus précisement , j'ai toujours pris soint d'éviter le moindre goto dans mes programmes .
3 - Avec l'experience , je peux vous assurer que cette façon de proceder est la meilleur qui soit.
Signé : Capitaine Jean-Luc Picard
Pour en terminer avec ça, je pense que l'organisation de ton prog doit être à peu près comme ça :
Pas besoin de goto
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while ((ligne = obtention_prochain_article()) != NULL) { init_traitement_article(); while ((num_champ = obtention_prochain_champ()) != -1) traitement_champ(num_champ); }
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
En principe, on utilise pas de goto. Il y a des exceptions, comme éventuellement le cas que tu décris, mais il fait tomber dans le raisonnement 'par saut' (if goto) qui s'oppose au raisonnement par 'action conditionelle' (if else) qui est la base de programmation structurée. C'est donc la porte ouverte à la spaghettisation du code, et franchement je ne le conseille pas. Montre un exemple de ce que tu veux faire.Envoyé par ulukahio
Si tu dois vraiment utiliser des goto, il est une regle absolue à ne pas briser (je ne sais plus si elle est de Knuth ou de Dijskra) : un goto est toujours descendant (autrement dit, on ne fait pas de boucles avec un goto).
En tout cas, c'est toujours un sujet passioné...
http://www.acm.org/classics/oct95/
http://www.fortranlib.com/gotoless.htm
etc.
Pas de Wi-Fi à la maison : CPL
Un goto remontant ? Tu as mérité le double trempage :Envoyé par calogerogigante
- Dans un bain de miel liquide
- Dans une bassine de fourmis rouges.
Bonne nuit.
Pas de Wi-Fi à la maison : CPL
Que penser de l'instruction continue alors?Si tu dois vraiment utiliser des goto, il est une regle absolue à ne pas briser (je ne sais plus si elle est de Knuth ou de Dijskra) : un goto est toujours descendant (autrement dit, on ne fait pas de boucles avec un goto).
(et qu'est ce que vous entendez par spaghettisation?)
Tu veux dire 'rapidement', parce que 'élégamment', si, un flag suffit en général (genre "j'ai trouvé", ou pointeur NULL etc.). Il suffit d'ajouter le testbdans la condition de sortie de la boucle. Comme ça, au moins c'est centralisé...Envoyé par HRS
Les courts circuits sauvages qui oublient de libérer les ressources, je préfère éviter dans le code courant.
Par contre, je veux bien utiliser des goto dans du code extrèmement critique en temps d'exécution, en prenant d'extrêmes précautions...
Pas de Wi-Fi à la maison : CPL
Envoyé par mat.MVoir ici, l'article est d'ailleurs très intéressant.Dijkstra observed that the quality of a programmer's code was inversely proportional to the number of gotos the programmer used
Dernière trouvaille :
trouvée iciin 1974.Böhm and Jacopini first proved theoretically that GOTO was unnecessary
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Meuh ?Envoyé par ronan99999
2 returns, c'est un de trop...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 { int ret = 0; int *piVar = calloc (SIZE, sizeof *piVar); if (piVar != NULL ) { /* traitement */ } else { ret = -1; } return ret; }
Pas de Wi-Fi à la maison : CPL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager