Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité de passage
    Inscrit en
    octobre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : octobre 2012
    Messages : 16
    Points : 4
    Points
    4

    Par défaut Récupération automatique du fichier txt du jour pour traitement

    Bonjour à tous,

    Je reçois quotidiennement la mise à jour de mon fichier principal d à travers des fichiers en txt qui ont un numéro qui se génère automatiquement de la façon suivante : C120624 - C120625 - C120626.... (AAMMJJ). Tous ces fichiers se cumulent dans un même dossier.

    Pour ce qui est du traitement des données : c'est ok en revanche je ne sais pas comment coder pour que la récupération du fichier du jour se fasse en automatique avant traitement.

    En espérant que vous pourriez me mettre sur la voie.

    Merci beaucoup par avance.

  2. #2
    Expert Confirmé Sénior
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 2 073
    Points : 4 038
    Points
    4 038

    Par défaut

    Bonjour,
    Qu'est-ce que tu entends par "la récupération du fichier du jour" ?

    Tatayo.

  3. #3
    Expert Confirmé
    Avatar de frenchsting
    Homme Profil pro Claude
    Développeur informatique
    Inscrit en
    juin 2003
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2003
    Messages : 1 789
    Points : 2 919
    Points
    2 919

    Par défaut

    Automatiquement -> timersys.

    Trouver le fichier :
    Code :
    1
    2
    3
    4
    5
    6
    7
    sNomFic est chaine
    sNomFic = DateSys()
    sNomFic = sNomFic[[3 a 8]]
    sNomFic = "C" + sNomFic 
    si ffichierexiste(sNomFic) alors
    //traitement
    fin
    [EDIT]J'avais mis "S" à la place de "C"...
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  4. #4
    Membre Expert Avatar de miripesage
    Homme Profil pro Said
    pesage electronique
    Inscrit en
    novembre 2009
    Messages
    702
    Détails du profil
    Informations personnelles :
    Nom : Homme Said
    Localisation : Algérie

    Informations professionnelles :
    Activité : pesage electronique
    Secteur : Industrie

    Informations forums :
    Inscription : novembre 2009
    Messages : 702
    Points : 1 120
    Points
    1 120

    Par défaut

    bonjour, ou comme ceci :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sDate est une chaîne=DateDuJour()
    sDate=Droite(sDate,6)
    
    MonFichier est une chaîne="C130109"
    MonFichier=Droite(MonFichier,6)
    SI MonFichier=sDate ALORS
    	Info("Monfichier est le fichier du jour")
    	MonFichier="C"+MonFichier
    	Info("monfichier est : "+MonFichier)
    	//traitement
    SINON
    	Info("non")
    	//traitement
    FIN
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  5. #5
    Invité de passage
    Inscrit en
    octobre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : octobre 2012
    Messages : 16
    Points : 4
    Points
    4

    Par défaut

    Merci beaucoup à vous, j'ai résolu mon problème.

  6. #6
    Invité de passage
    Inscrit en
    octobre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : octobre 2012
    Messages : 16
    Points : 4
    Points
    4

    Par défaut

    Re bonjour à tous, je réouvre la discussion car je n'avais pas pensé aux aléas éventuels....

    Normalement je reçois le fichier du jour pour traitement mais il arrive parfois que ce fichier ne soit pas envoyé le jour J mais par exemple 2 jours après....donc avec 2 autres fichiers (ceux de la veille et de l'avant veille) => ce qui donne 3 fichiers à traiter en J+3. Donc je ne peux pas baser mon traitement uniquement sur la datesys().

    Donc s'il n'y a que le fichier du jour = On le traite mais si il y a plusieurs fichiers, il faudrait que le fichier le plus ancien soit traité en premier

    * Tous ces fichiers commencent par la lette C à laquelle se rajoute AAMMJJ => C130211 - C130212....

    * Ils arrivent tous dans un même dossier : C:\Users\Gibs\Desktop\INBOX\"+CAAMMJJ+".txt"

    *Ils doivent être traités par ordre croissant pour ensuite être déplacés dans un autre dossier:
    C:\Users\Gibs\Desktop\DONE\"+CAAMMJJ+".txt"

    J'ai pensé partir sur une Liste qui regrouperait tous les fichiers qui commencent par "C" pour ensuite faire le traitement sur chacun des fichiers. => mais je n'y arrive pas.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Recherch est une chaîne
    RepCourant est une chaîne = "C:\Users\GIBS\Desktop\INBOX\"+"C*.*"
    
    
    // On vide la liste LISTFIC
    ListeSupprimeTout(LISTFIC)
    
    // On amorce la recherche. 
    // La constante FRFichier indique qu'on recherche des fichiers
    Recherch=fRep(RepCourant,frFichier)
    // Recherch = "" si plus de fichiers dans le répertoire
    TANTQUE Recherch <> ""
    	// On ajoute le fichier trouvé dans la liste LISTFIC
    	ListeAjoute(LISTFIC,Recherch)
    	// On recherche le suivant
    	Recherch=fRep("",frFichier)
    FIN
    Le traitement qui doit s'effectuer (je vous mets mon code actuel qui est donc basé sur datesys()
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    unfichier est une chaîne
    unfichier = DateSys()
    unfichier = unfichier[[3 A 8]]
    unfichier = "C" + unfichier
    
    unfichier = "C:\Users\Gibs\Desktop\INBOX\"+unfichier+".txt"
    
    
    SI fFichierExiste(unfichier) = Vrai ALORS 
    	Info("Le fichier " + unfichier + " existe bien sur le disque")
    	
    	ni est un entier
    	NbreEnr est un entier
    	
    	ni = 0
    	NbreEnr = HNbEnr(HF_CV)
    	//-----------------
    	
    	nIdfichier est un entier
    	sChaîneLue est une chaîne
    	
    	// Ouverture du fichier
    	nIdfichier = fOuvre(unfichier, foLecture)
    	SI unfichier <> -1 ALORS
    		
    		// Lecture du fichier
    		sChaîneLue = fLitLigne(nIdfichier)
    		TANTQUE sChaîneLue <> EOT
    			//--------------------
    			ni ++
    			Jauge(ni,NbreEnr,"Import des mises à jours")
    			//----------------------
    			
    			
    			HLitPremier(HF_CV,ND)
    			
    			HLitRecherchePremier(HF_CV,ND,sChaîneLue[[13 sur 9]])
    			TANTQUE HTrouve()=Vrai
    				
    				//-------------------
    			PJ_VAL_CP.ND=HF_CV.ND
    			PJ_VAL_CP.DateDebutvalidite=HF_CV.DateDebutvalidite
    			HAjoute(PJ_VAL_CP)
    				FIN
    				//---------------------
    			
    				HLitPremier(HF_CV,ND)
    				
    				HLitRecherchePremier(HF_CV,ND,sChaîneLue[[13 sur 9]])
    				TANTQUE HTrouve()=Vrai
    				HSupprime()
    				HLitSuivant()
    			FIN
    			//	FIN
    			// Récupération des données
    			HF_CV.codeenregistrement = sChaîneLue[[1 sur 2]] // => OK
    			HF_CV.dateconstitutiondossier = ChaîneVersDate(sChaîneLue[[3 sur 10]],"AAAA-MM-JJ") // => OK
    			HF_CV.ND = sChaîneLue[[13 sur 9]]  // => OK
    			HF_CV.NOM=sChaîneLue[[20 sur 35]]  // => OK
    									
    			// J'ajoute les données
    			HAjoute(HF_CV)
    			
    			sChaîneLue = fLitLigne(nIdfichier)
    			
    		FIN
    	FIN 
    	// Fermeture du fichier
    	fFerme(nIdfichier)
    	Info("Traitement du fichier STATUT OK")
    	Jauge()
    SINON
    	Erreur("Le fichier n'est pas disponible")
    	
    FIN
    Merci pour votre aide ;-)

  7. #7
    Expert Confirmé Sénior
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 2 073
    Points : 4 038
    Points
    4 038

    Par défaut

    Bonjour,
    Tu peux utiliser fListefichier pour récupérer la liste des fichiers présents dans le répertoire. Cette fonction renvoie la liste sous forme de chaine de caractères.
    Il me semble que la liste est triée par nom, mais si tu veux "forcer le tri":
    Il suffit de parser cette chaine, de mettre le tout dans un tableau puis de trier le tableau.
    Ainsi les fichiers sont dans l'ordre chronologique, il ne te reste plus qu'à parcourir le tableau et traiter les fichiers.

    J'ai cherché dans l'aide, visiblement on ne peut pas trier une variable "liste", d'où mon passage par un tableau.

    Tatayo.

  8. #8
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Inscrit en
    septembre 2008
    Messages
    826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : septembre 2008
    Messages : 826
    Points : 462
    Points
    462

    Par défaut

    Bonjour,

    Une fois un fichier txt récupéré et "mouliné" dans ton application Windev, ne peux tu pas le déplacer dans un dossier d'archive ?

    Comme çà, si des fichiers arrivent plus tard, tu les mets dans un dossier temporaire de "traitement" on va dire et dans ce dossier il n'y aura que les fichiers à traiter. A toi après de vérifier la date d'arrivé des fichiers pour savoir lequel traiter en premier, second, etc...

  9. #9
    Expert Confirmé
    Avatar de frenchsting
    Homme Profil pro Claude
    Développeur informatique
    Inscrit en
    juin 2003
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2003
    Messages : 1 789
    Points : 2 919
    Points
    2 919

    Par défaut

    Je plussoie Tatayo et Damien. Sans déplacer le fichier, tu peux le renommer (en changeant l'extension en ".old"). En te débrouillant bien cela n'interfère pas avec le filtre d'un flistefichier().
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  10. #10
    Membre Expert
    Homme Profil pro Nicolas Jeanneau
    Développeur et responsable micros/réseaux
    Inscrit en
    octobre 2010
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas Jeanneau
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 067
    Points : 2 057
    Points
    2 057

    Par défaut

    Bonjour,

    j'y vais de ma proposition :

    Parcours de tous les fichiers présents dans le répertoire pour connaître quel est le plus ancien. FListeFichier te donne une chaîne dont tu peux isoler chaque composante par le séparateur et la date par le nom (CAAMMJJ nous permet de savoir cela).

    Ensuite on cherche si un fichier JJ, JJ+1, JJ+2 ... existe jusqu'à la date du jour. Comme le traitement fait également le ménage on a parcouru tous les fichiers CXXXXX.txt et on est sûr d'avoir traité dans l'ordre.


    Très sommairement et sans aucun contrôle :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    UnFichier, ResListeFichier, PlusVieuxFichier, FichierEnCours, FichierDuJour sont des chaînes
    EntierDate est un entier
    
    PlusVieuxFichier= DateSys()
    PlusVieuxFichier= PlusVieuxFichier[[3 A 8]]
    PlusVieuxFichier= "C" + PlusVieuxFichier
    
    FichierDuJour=PlusVieuxFichier
    
    ResListeFichier = fListeFichier("C:\Users\GIBS\Desktop\INBOX\"+"C*.*",frInterruptible)
    // Pour chaque fichier trouvé
    POUR TOUTE CHAÎNE UnFichier DE ResListeFichier SEPAREE PAR RC
       // Test de la date
       FichierEnCours = ExtraitChaine(UnFichier,1,".",)
       SI VAL(PlusVieuxFichier[[2 A 7]]) > VAL(FichierEnCours[[2 A 7]]) ALORS
          PlusVieuxFichier = FichierEnCours 
       FIN
    FIN
    
    EntierDate = VAL(PlusVieuxFichier[[2 A 7]])
    
    TANTQUE PlusVieuxFichier <> FichierDuJour
       SI fFichierExiste(PlusVieuxFichier) = Vrai ALORS 
          // Traitement sur le fichier
          ...
          // Déplacement du fichier ou suppression
          ...
       FIN
    
       // Changement de fichier
       EntierDate += 1
       PlusVieuxFichier = "C"+ NumeriqueVersChaine(EntierDate)
    FIN
    Bon courage,

    Nicolas

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •