Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev
WinDev Forum d'entraide sur la programmation en WinDev
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 20h30   #1
Gibs98
Invité de passage
 
Inscription : 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.
Gibs98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 08h21   #2
tatayo
Expert Confirmé
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 550
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 550
Points : 3 098
Points : 3 098
Bonjour,
Qu'est-ce que tu entends par "la récupération du fichier du jour" ?

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 08h21   #3
frenchsting
Expert Confirmé
 
Avatar de frenchsting
 
Homme Claude
Développeur informatique
Inscription : juin 2003
Messages : 1 806
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 806
Points : 3 151
Points : 3 151
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
frenchsting est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/01/2013, 08h23   #4
miripesage
Membre Expert
 
Avatar de miripesage
 
Homme Said
pesage electronique
Inscription : novembre 2009
Messages : 697
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 : 697
Points : 1 114
Points : 1 114
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!
miripesage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 21h57   #5
Gibs98
Invité de passage
 
Inscription : octobre 2012
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2012
Messages : 16
Points : 4
Points : 4
Merci beaucoup à vous, j'ai résolu mon problème.
Gibs98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 03h06   #6
Gibs98
Invité de passage
 
Inscription : octobre 2012
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2012
Messages : 16
Points : 4
Points : 4
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 ;-)
Gibs98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 08h22   #7
tatayo
Expert Confirmé
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 550
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 550
Points : 3 098
Points : 3 098
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.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/02/2013, 08h43   #8
WDKyle
Membre éclairé
 
Avatar de WDKyle
 
Homme
Inscription : septembre 2008
Messages : 592
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : septembre 2008
Messages : 592
Points : 324
Points : 324
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...
WDKyle est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/02/2013, 10h05   #9
frenchsting
Expert Confirmé
 
Avatar de frenchsting
 
Homme Claude
Développeur informatique
Inscription : juin 2003
Messages : 1 806
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 806
Points : 3 151
Points : 3 151
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
frenchsting est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 22h35   #10
Nicolas_Jeanneau
Membre Expert
 
Homme Nicolas Jeanneau
Responsable du parc et des réseaux de télécommunication
Inscription : octobre 2010
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Jeanneau
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Responsable du parc et des réseaux de télécommunication
Secteur : Bâtiment

Informations forums :
Inscription : octobre 2010
Messages : 871
Points : 1 683
Points : 1 683
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
Nicolas_Jeanneau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web