OVH Cloud OVH Cloud

Renommer un fichier et l'indicer

8 réponses
Avatar
RENAUD Eric
Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour garder
un historique
j'enregistre le fichier avec son nom suivi de la date au format dd-mm-yy et
je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe pas
avec VB.
Quelqu'un a t'il une solution.
D'avance merci

8 réponses

Avatar
X
Bonjour,

En créant un fichier d'indice, à chaque fois que tu enregistre ton
fichier x, tu récupères la valeur du fichier d'indice que tu ajoute au nom
du nouveau fichier, puis tu fais +1 dans le fichier d'indice...

Autre solution, tu descend plus bas dans le nom, à la place de l'indice
tu classe avec une date et une heure, comme ça:

aaaammjj_hh:mnss_nom_nomCommun.ext

Ainsi tu as lisiblement tous tes fichiers par moment de création, et avec
nomCommun, tu peux faire une recherche *nomCommun.ext
facilement....

Le nom commun, par rapport à ton exemple "pro", soit:
aaaammjj:hhmnss_version_PRO.ext
L'intérêt de mettre la date en sens contraire est que l'on peu classer par
date...


------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"RENAUD Eric" a écrit dans le message de news:

Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour garder
un historique
j'enregistre le fichier avec son nom suivi de la date au format dd-mm-yy
et
je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe pas
avec VB.
Quelqu'un a t'il une solution.
D'avance merci





Avatar
scraper
Bonjour RENAUD Eric, dans le message
news:
tu disais :

Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour
garder un historique
j'enregistre le fichier avec son nom suivi de la date au format
dd-mm-yy et je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe
pas avec VB.
Quelqu'un a t'il une solution.




solution, je ne sais pas, mais peut être une suggestion ?

pourquoi ne pas utiliser l'API SHFileOperation, avec le Flag
FOF_RENAMEONCOLLISION ?

ça te donnerait des résultats de cette forme :

Copie (2) de prod.dat-05-03-06

pour reprendre ton exemple, et en supposant que le nom de fichier,
comportant la date, est géré par ailleurs ...




--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper
Avatar
Jean-Marc
"RENAUD Eric" a écrit dans le message de
news:
Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour


garder
un historique
j'enregistre le fichier avec son nom suivi de la date au format


dd-mm-yy et
je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe


pas
avec VB.
Quelqu'un a t'il une solution.




Hello,

tu peux faire comme ceci:
Principe:
tu comptes le nombre de fichier qui commencent par le
nom choisi, par exemple
'prod.dat-05-03-06'

la focntion CompteFichiers te retourne le nombre de fichiers
qui commencent comme cela.
Tu fais plus 1, tu concatènes "-v" & version
et tu sauves.

Exemple en image:

Public Function CompteFichiers(fileName As String) As Long
Dim szFic As String
Dim lNbFiles As Long

szFic = Dir$(fileName & "*", vbNormal)
Do While szFic <> ""
lNbFiles = lNbFiles + 1
szFic = Dir$()
Loop
CompteFichiers = lNbFiles
End Function

et un exemple d'appel:

Private Sub Command1_Click()
Dim fic As String
Dim version As Long

' modèle
fic = "c:tempprod.dat-05-03-06"

' combien comme ça ?
version = CompteFichiers(fic)

' hop on incrémente
version = version +

' on concatene 1
fic = fic & "-v" & Trim$(Str$(version))

' et on sauve avec le nouveau numero de version
' ce qu'on veut ici
End Sub

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Picalausa François
"RENAUD Eric" a écrit dans le message de news:

Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour garder
un historique
j'enregistre le fichier avec son nom suivi de la date au format dd-mm-yy
et
je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe pas
avec VB.
Quelqu'un a t'il une solution.
D'avance merci



Hello,

Dans l'exemple que tu donne, un problème se pose dans le cas où un
utilisateur supprime la v1...
Pour compter le nombre d'occurences, tu peux employer Dir. Celui-ci te
retourne aussi le nom du fichier dont tu peux te servir pour déterminer la
dernière occurence.
Voici un exemple de fonction qui retourne le nouveau nom de fichier sur ce
principe (exemple d'utilisation en base):

'Folder : Dossier où sont les fichiers à enregistrer
'BaseName : Tout ce qui vient avant le numéro de version (p.ex
"prod.dat-05-03-06-v")
'Extension : Extension du fichier
'DigitsCount : Nombre de numéros dans le fichier (pour 3 : 7 devient 007)
'BaseNumber : Numéro du premier fichier (par défaut: 1)
'NewNumber : Retourne le nouveau numéro de fichier
Private Function GetNextFileName( _
Folder As String, _
BaseName As String, _
Extension As String, _
Optional ByRef DigitsCount As Long _
Optional ByVal BaseNumber As Long = 1, _
Optional ByRef NewNumber As Long, _
) _
As String

Dim LastFile As String, StrippedName As String, CurrentVersion As Long

'Ajouter ici une vérification
'sur BaseName et Extension (pas de *?: etc.)

'S'assure que l'extension ne commence pas par un .
If Left$(Extension, 1) = "." Then Extension = Mid$(Extension, 2)
'S'assure que le dossier finit par un
Folder = EndPath(Folder)

'Le premier fichier sera nommé BaseName LastVersion . Extension
NewNumber = BaseNumber

'Entamme la recherche
LastFile = Dir(Folder & BaseName & "*." & Extension)

While (LenB(LastFile))
'Supprime les informations de LastVersion et Extension du nom
StrippedName = Mid$(LastFile, Len(BaseName) + 1)
StrippedName = Left$(StrippedName, Len(StrippedName) -
Len(Extension) - 1)

'Vérifie si la partie restante est un nombre
If IsDigits(StrippedName) Then
'Tente de la convertir en nombre
CurrentVersion = CLng(StrippedName)

'Vérifie s'il s'agit de la dernière version
If CurrentVersion >= NewNumber Then
NewNumber = CurrentVersion + 1
End If
End If

'Continue la recherche
LastFile = Dir
Wend

GetNextFileName = BaseName & Format(NewNumber, String$(DigitsCount,
"0")) & "." & Extension
End Function

Public Function EndPath(FilePath As String) As String
EndPath = Trim$(FilePath)
If Right$(EndPath, 1) <> "" Then EndPath = EndPath & ""
End Function

Public Function IsDigits(ByVal strValue As String) As Boolean
IsDigits = (Not (strValue Like "*[!0-9]*")) And Len(strValue)
End Function

'-----------------------------------------------------------------------
'Exemple d'utilisation
Private Sub Form_Load()
Const Folder As String = "C:test"
Const Ext As String = "log"

Dim FileName As String, i As Long, FFN As Integer

For i = 1 To 10
FileName = GetNextFileName(Folder, _
"Mes_logs_" & Format(Now, "ddmmyy") & "_v", _
Ext, _
2, 1)

FFN = FreeFile
Open Folder & FileName For Binary As FFN
Close FFN
Next i


For i = 1 To 10 Step 2
Kill Folder & "Mes_logs_" & Format(Now, "ddmmyy") & "_v" & _
Format(i, String$(2, "0")) _
& "." & Ext
Next i


Debug.Print GetNextFileName(Folder, _
"Mes_logs_" & Format(Now, "ddmmyy") & "_v", _
Ext, _
2, 1)
End Sub

--
Picalausa François
Avatar
Jean-Marc
"Picalausa François" a écrit dans le message de
news:
"RENAUD Eric" a écrit dans le message de news:

> Bonjour,
>
> J'enregistre plusieurs fois par jour un fichier de même nom et pour


garder
> un historique
> j'enregistre le fichier avec son nom suivi de la date au format


dd-mm-yy
> et
> je voudrais également mettre un N° de version.
> Exemple ;:
> prod.dat-05-03-06-v1
> prod.dat-05-03-06-v2
> prod.dat-05-03-06-v3
>
> En fait au moment d'enregistrer, il me faut compter combien de fois


je
> trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
> Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe


pas
> avec VB.
> Quelqu'un a t'il une solution.
> D'avance merci

Hello,

Dans l'exemple que tu donne, un problème se pose dans le cas où un
utilisateur supprime la v1...
Pour compter le nombre d'occurences, tu peux employer Dir. Celui-ci te
retourne aussi le nom du fichier dont tu peux te servir pour


déterminer la
dernière occurence.
Voici un exemple de fonction qui retourne le nouveau nom de fichier


sur ce
principe (exemple d'utilisation en base):




Hello,

<SNIP le code la belle fonction>


joli et bien meilleur que ma fonction, qui est naïve et ne
gérait pas les effacements de fichiers.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
RENAUD Eric
Il semble qu'ily est une erreur car le programme VB n'accepte pas la syntaxe
de la première ligne .
La fin me parait bizarre ?
Private Function GetNextFileName( _
....
.....
Optional ByRef NewNumber As Long, _
) _
As String

"Picalausa François" a écrit dans le message de news:

"RENAUD Eric" a écrit dans le message de news:

Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour
garder
un historique
j'enregistre le fichier avec son nom suivi de la date au format dd-mm-yy
et
je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe pas
avec VB.
Quelqu'un a t'il une solution.
D'avance merci



Hello,

Dans l'exemple que tu donne, un problème se pose dans le cas où un
utilisateur supprime la v1...
Pour compter le nombre d'occurences, tu peux employer Dir. Celui-ci te
retourne aussi le nom du fichier dont tu peux te servir pour déterminer la
dernière occurence.
Voici un exemple de fonction qui retourne le nouveau nom de fichier sur ce
principe (exemple d'utilisation en base):

'Folder : Dossier où sont les fichiers à enregistrer
'BaseName : Tout ce qui vient avant le numéro de version (p.ex
"prod.dat-05-03-06-v")
'Extension : Extension du fichier
'DigitsCount : Nombre de numéros dans le fichier (pour 3 : 7 devient 007)
'BaseNumber : Numéro du premier fichier (par défaut: 1)
'NewNumber : Retourne le nouveau numéro de fichier
Private Function GetNextFileName( _
Folder As String, _
BaseName As String, _
Extension As String, _
Optional ByRef DigitsCount As Long _
Optional ByVal BaseNumber As Long = 1, _
Optional ByRef NewNumber As Long, _
) _
As String

Dim LastFile As String, StrippedName As String, CurrentVersion As Long

'Ajouter ici une vérification
'sur BaseName et Extension (pas de *?: etc.)

'S'assure que l'extension ne commence pas par un .
If Left$(Extension, 1) = "." Then Extension = Mid$(Extension, 2)
'S'assure que le dossier finit par un
Folder = EndPath(Folder)

'Le premier fichier sera nommé BaseName LastVersion . Extension
NewNumber = BaseNumber

'Entamme la recherche
LastFile = Dir(Folder & BaseName & "*." & Extension)

While (LenB(LastFile))
'Supprime les informations de LastVersion et Extension du nom
StrippedName = Mid$(LastFile, Len(BaseName) + 1)
StrippedName = Left$(StrippedName, Len(StrippedName) -
Len(Extension) - 1)

'Vérifie si la partie restante est un nombre
If IsDigits(StrippedName) Then
'Tente de la convertir en nombre
CurrentVersion = CLng(StrippedName)

'Vérifie s'il s'agit de la dernière version
If CurrentVersion >= NewNumber Then
NewNumber = CurrentVersion + 1
End If
End If

'Continue la recherche
LastFile = Dir
Wend

GetNextFileName = BaseName & Format(NewNumber, String$(DigitsCount,
"0")) & "." & Extension
End Function

Public Function EndPath(FilePath As String) As String
EndPath = Trim$(FilePath)
If Right$(EndPath, 1) <> "" Then EndPath = EndPath & ""
End Function

Public Function IsDigits(ByVal strValue As String) As Boolean
IsDigits = (Not (strValue Like "*[!0-9]*")) And Len(strValue)
End Function

'-----------------------------------------------------------------------
'Exemple d'utilisation
Private Sub Form_Load()
Const Folder As String = "C:test"
Const Ext As String = "log"

Dim FileName As String, i As Long, FFN As Integer

For i = 1 To 10
FileName = GetNextFileName(Folder, _
"Mes_logs_" & Format(Now, "ddmmyy") & "_v", _
Ext, _
2, 1)

FFN = FreeFile
Open Folder & FileName For Binary As FFN
Close FFN
Next i


For i = 1 To 10 Step 2
Kill Folder & "Mes_logs_" & Format(Now, "ddmmyy") & "_v" & _
Format(i, String$(2, "0")) _
& "." & Ext
Next i


Debug.Print GetNextFileName(Folder, _
"Mes_logs_" & Format(Now, "ddmmyy") & "_v", _
Ext, _
2, 1)
End Sub

--
Picalausa François



Avatar
bayosky
Dans le message ,
RENAUD Eric a écrit :
Il semble qu'ily est une erreur car le programme VB n'accepte pas la
syntaxe de la première ligne .
La fin me parait bizarre ?
Private Function GetNextFileName( _
....
.....
Optional ByRef NewNumber As Long, _
) _



il manque la virgule sur la ligne "... DigitsCount ..."
entre
"Long"
et
" _"

Voualou :o)

HB
Avatar
Driss HANIB
pourquoi ne pas mettre ladate et l'heure de sauvegarde..

de la forme aaaa-mm-jjj_hh-mm

sauf si vraiment tu veux un numéro de version.
ainsi tu auras toujours des versions différntes

Driss
"scraper" a écrit dans le message de news:

Bonjour RENAUD Eric, dans le message
news:
tu disais :

Bonjour,

J'enregistre plusieurs fois par jour un fichier de même nom et pour
garder un historique
j'enregistre le fichier avec son nom suivi de la date au format
dd-mm-yy et je voudrais également mettre un N° de version.
Exemple ;:
prod.dat-05-03-06-v1
prod.dat-05-03-06-v2
prod.dat-05-03-06-v3

En fait au moment d'enregistrer, il me faut compter combien de fois je
trouve prod.dat-05-03-06 et cela me donnera le N° d'indice.
Je l'ai fait avec Excel et Application.FileSearch mais cela n'existe
pas avec VB.
Quelqu'un a t'il une solution.




solution, je ne sais pas, mais peut être une suggestion ?

pourquoi ne pas utiliser l'API SHFileOperation, avec le Flag
FOF_RENAMEONCOLLISION ?

ça te donnerait des résultats de cette forme :

Copie (2) de prod.dat-05-03-06

pour reprendre ton exemple, et en supposant que le nom de fichier,
comportant la date, est géré par ailleurs ...




--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper