IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Projet C/C++ Tri de données dans un fichier .txt


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Pilote de ligne
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Pilote de ligne

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Projet C/C++ Tri de données dans un fichier .txt
    Bonjour à tous,

    Je suis nouveau sur le forum, car je souhaiterai me lancer dans un "petit" projet en C ou C++ afin de me faciliter la vie tous les mois.

    Je m'explique, tous les mois je reçois plusieurs planning pour mon travail et je dois faire une liste de choix qui est ensuite assigné par séniorité dans ma compagnie. Je reçois ces plannings sous format .txt, et je vous ai joint un échantillon de ces différents plannings.

    Chaque "block" représente un planning (à droite "BLK N° XXX", est le numéro de chaque planning).

    Ce que je souhaiterai faire, c'est créer un programme qui me tri les "block" donc les plannings en fonction du nombre de jours "off" les weekend sur le mois en l'occurence représenté par "X" ou ":" en dessous de "SA" ou "SU". Si dans un premier temps j'arrive à faire ça, ça serait déjà pas mal.

    Ensuite, j'aimerai pouvoir lui dire de me trier ces blocks en fonction de critères, par exemple, nombre de jours "off" les weekends, ensuite nombre de jour off totale et ensuite le minimum d'heure TAFB (time away from base).

    En gros je lui donne les critères, et il me tri toutes les lignes en fonctions des critères que je lui donne.


    Sur la théorie ça serait:

    Donne moi dans l'ordre les blocks avec maximum nombre de jour off le weekend, ensuite parmis toutes les lignes avec 8 jour off le weekend, réorganise les de manière à trier celle avec le plus de jour off totale en premier, pareil pour les lignes avec 7 jour off les weekends, etc.. et puis éventuellement rajouter le TAFB dans l'équation.


    Ma question est, est ce que c'est un exercice très difficile pour un débutant? Est ce réaliste? Est ce que le C (ou C++) est le plus adapté à ce que je souhaite faire?

    merci par avance.

    Julien
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    On peut décomposer une solution à ton problème ainsi :

    • reconstruire une structure de données cohérente à partir des informations organisées dans le fichier d'entrée ;
    • faire en sorte de pouvoir effectuer des requêtes sur la structure et présenter l'information en fonction de différents critères.

    Les informations sont vraisemblablement déjà stockées et organisées quelque part en amont (base de données ?) puisqu'on a généré le fichier d'entrée dans un format cohérent, d'où une première question : ne pourrait-on zapper la première étape, à savoir interroger directement le système d'origine ?


    Je vais tout de même répondre aux tiennes, mais dans l'ordre inverse :

    Citation Envoyé par ju10489 Voir le message
    Est ce que le C (ou C++) est le plus adapté à ce que je souhaite faire?
    Non, certainement pas (long et ultra-chiant, pour zéro bénèf au final). Ce qu'il te faut c'est un langage de script, ou un bridge (Python, par exemple). Avec possiblement une petite base de données derrière.

    Citation Envoyé par ju10489 Voir le message
    Ma question est, est ce que c'est un exercice très difficile pour un débutant? Est ce réaliste?
    Pour un débutant en programmation ? En C, non c'est trop difficile. En Python, c'est pas de la tarte.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Pilote de ligne
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Pilote de ligne

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut Matt,

    Merci pour ta réponse.

    Non malheureusement je n'ai pas accès à la source. En fait c'est un logiciel ultra complexe qui prend tous les vols à faire par la compagnie, la compagnie donne des critères (nombre d'overnight minimum, nombre de jour off minimum, temps de repos etc..) et ce programme pond un fichier avec les lignes.

    Bon je crois que ça va être compliqué alors.. je vais me taper tout à la main. J'aurai bien aimé par la même occasion, apprendre un langage de programmation. Je vais regarder Python.

    Merci encore!

    A+

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Mais Python est un langage de programmation à part entière. En fait Python est un peu tout, sauf un langage compilé. Rien ne t'empêche de te mettre au C par la suite, c'est simplement que pour le cas d'application concret que tu nous présentes, ce n'est vraiment pas l'outil qu'il te faut. L'analyse et le traitement de chaînes de caractères sont mille fois plus aisés dans un langage de plus haut niveau (Python, Perl, shell, C#, etc..).

    Renseigne-toi également sur ce qu'est une expression régulière (regex), ça pourra éventuellement t'être utile.

    Attends quelques réponses supplémentaires pour te faire un avis.

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est aussi le sujet de prédilection du couple sed et grep (voire leurs amis cut et sort).
    Selon la nature du traitement.
    Ces quelques programmes peuvent t'aider à mettre en forme ton fichier pour qu'il soit plus utilisable, ce qui peut grandement simplifier l'écriture du script/programme de décision.

    A toi de voir si tu veux une décision automatique, ou simplement de l'information plus claire pour t'aider à prendre la décision.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Pilote de ligne
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Pilote de ligne

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait ce que j'aurai aimé pouvoir faire c'est le mettre sous excel et faire un espèce de tri ou il me met dans les colonnes que je décides les lignes avec le plus de croix en premier. Mais la mise en forme sous excel est galère, car tout se retrouve dans la premiere colonne.

    Pour le Python j'ai regardé un peu, j'ai l'impression qu'il va falloir que je créée une base de donné afin de stocké les donnés (nombre de X par exemple) pour chaque ligne, pour ensuite faire le tri.

    Mon idéale serait de récupéré un fichier avec juste les numéros des blocks dans l'ordre, en fonction de mes critères de préférences.

    Merci pour les réponses

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ju10489 Voir le message
    En fait ce que j'aurai aimé pouvoir faire c'est le mettre sous excel et faire un espèce de tri ou il me met dans les colonnes que je décides les lignes avec le plus de croix en premier. Mais la mise en forme sous excel est galère, car tout se retrouve dans la premiere colonne.
    Bonjour

    Si tu utilises le fichier initial (celui fourni en exemple) pour en réécrire un autre ayant des colonnes séparées par un point-virgule, excel pourra ingérer le second et placera automatiquement les infos dans les bonnes colonnes

    Citation Envoyé par ju10489 Voir le message
    Pour le Python j'ai regardé un peu, j'ai l'impression qu'il va falloir que je créée une base de donné afin de stocké les donnés (nombre de X par exemple) pour chaque ligne, pour ensuite faire le tri.
    Ce n'est pas le langage qui impose une solution mais ta réflexion. Ca peut se faire en Python avec une bdd, en Python avec des tableaux en mémoire, en C avec une bdd ou en C avec des tableaux en mémoire. La différence c'est que Python te propose effectivement un outil interne de "mini-bdd" (sqlite) déjà intégré en natif alors que les autres langages ne le proposent pas. Mais je pense aussi que Python est bien plus adapté à ce boulot que le C. Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    personne = (
    	('john', 'A', 15),
    	('jane', 'B', 10),
    	('dave', 'C', 12),
    )
     
    for (libelle, key) in (
    	("age", 2),
    	("nom", 1),
    	("prenom", 0),
    ):
    	print "Tri par %s: %s" % (
    		libelle,
    		", ".join(
    			"[%s, %s, age=%d]" % (x, y, z) for (x, y, z) in sorted(personne, key=lambda x: x[key])
    		),
    	)
    # for

    Résultat
    Tri par age: [jane, B, age=10], [dave, C, age=12], [john, A, age=15]
    Tri par nom: [john, A, age=15], [jane, B, age=10], [dave, C, age=12]
    Tri par prenom: [dave, C, age=12], [jane, B, age=10], [john, A, age=15]
    Si j'avais dû écrire la même chose en C, j'aurais mis 1h (et seulement parce que j'ai l'habitude) et ça aurait fait 300 lignes...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2007, 17h38
  2. [VBS]Lire des données dans un fichier .txt
    Par kacxial dans le forum VBScript
    Réponses: 4
    Dernier message: 28/02/2007, 13h44
  3. Rajout de données dans un fichier txt
    Par ben_ghost dans le forum C++/CLI
    Réponses: 4
    Dernier message: 10/10/2006, 11h30
  4. Comment créer une base de donnée dans un fichier .txt
    Par vantoff dans le forum C++Builder
    Réponses: 9
    Dernier message: 19/07/2006, 19h44
  5. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo