Bonjour bonjour,
Alors, j'ai revu mon code, effectivement, je devais être fatigué, car quelques erreurs s'y étaient glissées...
pour résumé mon intention de départ :
Je voulais remettre en forme un fichier texte puis le découper toute les 200 lignes. Tout cela automatiquement grâce à un watchfolder...
Voici ma partie traitement (sans la procédure "watchfolder") :
Code : Tout sélectionner
Procedure Traitement()
PtTableau.l ; Pointeur tableau : tableau du watchfolder dans lequel il y a les noms de fichiers
flag1line.b ; Sert à definir la première ligne du fichier
compteurlignes.w ; Compteur de ligne
compteurfichier.b ; Compteur de fichiers de sortie
;*
;* On regarde si il y a des fichiers dans le watchfolder.
;*-------------------------------------------------------
Repeat
FlagExamRep=1
If WatchFolder2Tab(GetGadgetText(#String_4), ".plt") ; Pas de fichier dans le rep. source.
;*
;* Si oui ReperIn$ ---> ReperOut$.
;*--------------------------------
For PtTableau=0 To NbFichWatch-1
Chy$=TabRepSrc$(1, PtTableau)
compteurfichier = 1
If FileSize(GetGadgetText(#String_4)+Chy$) <>-1 ; si le fichier n'existe pas alors --->
OpenFile(#FichierPLT, GetGadgetText(#String_4)+Chy$) ; Ouvre le fichier plt qu'il y a dans le dossier inbox
CreateFile(#FichierPlayT, GetGadgetText(#String_5)+Chy$+"_PlayT_"+Str(compteurfichier)+".txt")
flag1line = #False
compteurlignes = 0 ; On initialise le compteur de lignes
Repeat
If compteurlignes = 200
CloseFile(#FichierPlayT)
Delay(100)
compteurfichier+1
;flag1line = #False Si besoin d'avoir dans chaque fichiers de sortie la première ligne en hard
CreateFile(#FichierPlayT, GetGadgetText(#String_5)+Chy$+"_PlayT_"+Str(compteurfichier)+".txt")
compteurlignes=0
EndIf
If Eof(#FichierPLT)
CloseFile(#FichierPLT)
CloseFile(#FichierPlayT)
Break
EndIf
Texte$ = ReadString(#FichierPLT)
ID$ = StringField(Texte$, 1, Chr(9)) ; On isole l'ID
Playtime$ = StringField(Texte$, 5, Chr(9)) ; On isole l'heure de play
If flag1line = #False
Duration$ = ""
type$ = "hard" ; Le permier pas de la playlist est en hard start, seulement le premier pas !
flag1line = #True
Else
Duration$ = StringField(Texte$, 7, Chr(9)) ; On isole la durée du media on ne le met pas sur la première ligne !
type$ = "auto"
EndIf
title$ = StringField(Texte$, 8, Chr(9)) ; On isole le titre du media
som$ = StringField(Texte$, 6, Chr(9)) ; On isole le SOM (Start Of Media)
; Ci-dessous on fabrique le fichier de sortie en lui precisant ce qu'on souhaite avoir...
WriteStringN(#FichierPlayT, GetGadgetText(#String_3) + ID$ + Chr(9) + Playtime$ + Chr(9) + Playtime$ + Chr(9) + Duration$ + Chr(9) + Chr(9) + Chr(9) + type$ + Chr(9) + title$+Chr(9)+ "0" + Chr(9) + som$)
compteurlignes+1 ; on incremente le compteur de ligne de 1
ForEver
EndIf
EventID=WindowEvent()
If EventID=#PB_Event_Gadget
Select EventGadget()
Case #Button_3 ;Quitter
Break
EndSelect
EndIf
If Not RenameFile(GetGadgetText(#String_4)+Chy$, GetGadgetText(#String_4)+"OK\"+Chy$) ; Une fois le PLT traité, on le déplace dans le dossier OK
DeleteFile(GetGadgetText(#String_4)+"OK\"+Chy$) ; Si le fichier existe déjà dans le dossier "OK", il sera supprimé.
EndIf
Next
EndIf
EventID=WindowEvent()
If EventID=#PB_Event_Gadget
Select EventGadget()
Case #Button_3 ;Quitter
Break
EndSelect
EndIf
Delay(20)
ForEver
ProcedureReturn #True
EndProcedure
Il y a surement de l'optimisation à faire mais en tout cas ça fonctionne déjà très bien
Merci à tous pour votre aide ! si il y a des intéressés, je peux fournir les fichiers
