Je viens de rencontrer un comportement qui me parait étrange avec le code (simplifié) suivant :
Code : Tout sélectionner
i = 0
Repeat ;
If i < 10
i+1
Continue
EndIf
Until #True
Debug i ; Affiche 1
Code : Tout sélectionner
i = 0
Repeat ;
If i < 10
i+1
Continue
EndIf
Until #True
Debug i ; Affiche 1
Code : Tout sélectionner
Repeat
ZapCc = 0
...
Until Cc And Not ZapCc
Code : Tout sélectionner
i = 0
Repeat ;
If i < 10
i+1
Continue
EndIf
Break ; C'es con mais si je met un `Until #True` le `Continue` quitte aussi la boucle...
ForEver
Debug i ; Affiche 10
Code : Tout sélectionner
i = 0
Repeat
i + 1
If i >= 10
Break
EndIf
ForEver
Debug i ; Affiche 10
Code : Tout sélectionner
For k=1 To 10
If k=5
Debug "- " + k
Continue ; N'affichera pas 5
EndIf
Debug k
Next
C'est ce que je fait dans mon code. (Le vrai, pas l'exemple bidon simplifié que j'ai mis plus haut.)Marc56 a écrit :Continue sert uniquement à sauter une partie de code et passer à l’itération suivante.
Code : Tout sélectionner
Procedure$ FichierSortie(Fichier$) ; Recherche d'un nom pour le fichier de sortie
Protected Chemin$, Extention$, Suffixe$ = ""
Protected LC_Ext$
Chemin$ = GetPathPart(Fichier$)
Fichier$ = GetFilePart(Fichier$)
Repeat
Extention$ = GetExtensionPart(Fichier$)
Fichier$ = GetFilePart(Fichier$, #PB_FileSystem_NoExtension)
LC_Ext$ = LCase(Extention$)
If (LC_Ext$ = "gz") Or (LC_Ext$ = "zip") Or
(StrU(Val(Extention$)) = Extention$)
Suffixe$ = "."+Extention$+Suffixe$
Continue ; On n'as pas encore séparé toutes les extentions
EndIf
Break ; C'es con mais si je met un `Until #True` le `Continue` quitte aussi la boucle...
ForEver
If Extention$ <> ""
Extention$ = "."+Extention$
EndIf
ProcedureReturn Chemin$+Fichier$+".clean"+Extention$+Suffixe$
EndProcedure
Code : Tout sélectionner
i = 0
Repeat ;
If i < 10
i+1
Else
Break
EndIf
ForEver
Debug i ; Affiche 10
Code : Tout sélectionner
Declare.s FichierSortie(Fichier$)
Fichier$="c:\toto\tutu\riri.tar.gz"
;Fichier$="c:\toto\tutu\riri.txt"
;Fichier$="toto"
Fichier$="Unfichier.avecdes.pointsdanslenom.log.gz"
debug FichierSortie(Fichier$)
;
Procedure.s FichierSortie(Fichier$)
count.i=countstring(Fichier$,".")
if count.i=0
ProcedureReturn fichier$+".clean"
ElseIf count.i>0 and count.i<3 ; il y a au moins 1 point ou 2 ....
Pos.i=findstring(Fichier$,".",1)
extrait1.s=mid(Fichier$,1,pos.i)+"clean"
extrait2.s=mid(Fichier$,pos.i,len(Fichier$))
ProcedureReturn extrait1.s+extrait2.s
ElseIf count.i>2 ;il y a plus de 2 points .. c'est quasi surement un nom avec des points dedans
; ici prevoir les autres cas possible je me sert des extentions que tu as donné .. je ne sais pas si il peut y en avoir d'autres
exten.s=".log,.tar" ; ici ajouter les extentions eventuelles séparées par une virgule
For i=1 to countstring(exten.s,",")+1
if FindString(Fichier$,StringField(exten.s,i,","),#PB_String_NoCase )
pos.i=FindString(Fichier$,StringField(exten.s,i,","),#PB_String_NoCase)
extrait1.s=mid(Fichier$,1,pos.i)+"clean"
extrait2.s=mid(Fichier$,pos.i,len(Fichier$))
Fichier$=extrait1.s+extrait2.s
Endif
Next i
ProcedureReturn Fichier$
Endif
EndProcedure
Code : Tout sélectionner
exten.s=".log,.tar"
C'est exactement ça. Mais je préfère aussi m'attendre à des extension triples ou plus.Mindphazer a écrit :Il essaie d'ajouter un ".clean" juste avant l'extension du fichier....
Sauf que pour des extensions "doubles", du style .tar.gz, l'extension renvoyée par PB est .gz, alors que lui veut mettre son .clean avant .tar.gz
Enfin, c'est ce que j'ai cru comprendre.....
Oui à condition, si j'ai bien compris le fonctionnement des fonctions liées aux regex, de disposer des groupes de remplacement. Mais pour cela il faudrait mettre à jour PCRE vers PCRE2.Zorro a écrit :je crois qu'avec les REGEx on doit pouvoir faire nettement plus court
Au début, je sépare l'emplacement et le nom du fichier pour soulager les traitements suivants. (Histoire de travailler avec des chaines plus petites).Zorro a écrit :donc c'etait bien compliqué , comme je le pensais
Code : Tout sélectionner
Procedure.s FichierSortie(fichier.s)
Protected.s extension
Protected.s nouvelle_extension
Protected.s path = GetPathPart(fichier)
Repeat
extension = GetExtensionPart(fichier)
fichier = GetFilePart(fichier, #PB_FileSystem_NoExtension)
If extension
nouvelle_extension = "." + extension + nouvelle_extension
EndIf
Select LCase(nouvelle_extension)
Case ".tar.gz", ".log.zip", ".log.txt"; ...
Break
EndSelect
Until extension = ""
ProcedureReturn path + fichier + ".clean" + nouvelle_extension
EndProcedure
Debug FichierSortie("Fichier")
Debug FichierSortie("C:\Test\Fichier.log")
Debug FichierSortie("Fichier.log.10")
Debug FichierSortie("Fichier.log.gz")
Debug FichierSortie("Fichier.tar.gz")
Debug FichierSortie("Unfichier.avecdes.pointsdanslenom.log.gz")
Debug FichierSortie("Unfichier.avecdes.pointsdanslenom.log.zip")
Debug FichierSortie("Unfichier.avec.des.points.dans.le.nom.log.txt")
Vendu !El Papounet a écrit :Et pourquoi pas un truc du genre
Code : Tout sélectionner
Procedure$ FichierSortie(Fichier$) ; Recherche d'un nom pour le fichier de sortie
Protected Chemin$, Extention$, Suffixe$ = ""
Chemin$ = GetPathPart(Fichier$) ; On sépare l'emplacement pour soulager les traitements qui suivent
Fichier$ = GetFilePart(Fichier$)
Repeat
Extention$ = GetExtensionPart(Fichier$)
Fichier$ = GetFilePart(Fichier$, #PB_FileSystem_NoExtension)
Select LCase(Extention$)
Case "log", "txt" ; Logs textuels
Suffixe$ = "." + Extention$ + Suffixe$
Case "tar", "gz", "zip", "7z" ; Logs compressés
Suffixe$ = "." + Extention$ + Suffixe$
Default
If (StrU(Val(Extention$)) = Extention$); N-ième fichier du même nom (entier base dix)
Suffixe$ = "." + Extention$ + Suffixe$
ElseIf Extention$ <> "" ; Extention non reconnue : Fait partie du nom du fichier
Fichier$ = Fichier$ + "." + Extention$
Extention$ = ""
EndIf
EndSelect
Until Extention$ = ""
ProcedureReturn Chemin$+Fichier$+".clean"+Suffixe$
EndProcedure