une tentative d'integration mais je m'y perds...

'on construit un tableau dynamique de tous les sous repertoires et ensuite
on boucle sur tous les repertoires ainsi trouvés,
'l'astuce est que la premiere boucle for continuera toujours tant que l'on
ajouteras des repertoires dans la liste pour
'justement aller voir leur sous repertoires car le ubound() evolue
'!Penser à adapter l'appel de copieFichier, le reprtoire n'est plus en dur
dans cette sub mais passée desormais en argument!

sub general

dim listeDirs()
redim listeDirs(0)
indexDir = 0

dirBase="/home/cemoi/Docments/bactma/seconde/"
listeDir(0) = dirBase

for r = 0 to ubound(listeDir)
   curDir = listeDir(r)
   chaine = dir(curDir+"*",16) ' le 16 ce n'est que pour les repertoires
   while chaine<>""
      if chaine <>"." and chaine<>".." then
         indexDir = indexDir + 1
         redim preserve listeDir(0 to indexDir)
         listeDir(indexDir) = curDir+chaine+"/"
      endif
      chaine = dir()
   wend
next r

for r = 0 to ubound(listeDir)
    chemin = listeDir(r)
    call CopierFichier(chemin)
next r
  end sub

'ancien code qui ne traite que dans le repertoire spécifié et non en
recursif

   ' Option Explicit
   ' public monTab() as String

   ' Sub CopierFichier
   ' Dim Chemin as String, NomFichier as String, Fichier(), NewName as
String
   ' Dim X as Integer
'
   ' Chemin =
ConvertToURL("/home/cemoi/Documents/bactma/seconde/Projet_01/Seq_terminologie_piece/")'le
chemin est à adapter à l'emplacement des fichiers
   ' NomFichier = Dir(Chemin & "*Cours.odt")
   ' X = 0
      ' Do While NomFichier <> ""
          'Fichier = Split(NomFichier,".")
         'NewName = Fichier(0) & "_eleve.odt"
         ' redim Preserve monTab(X)
         ' monTab(X) = ConvertToURL(Chemin & NewName)
         ' Filecopy ConvertToURL(Chemin & NomFichier), monTab(X)
         ' NomFichier = Dir()
         ' X = X + 1
      ' Loop
      ' RemplacerStyle
   ' End Sub

    Sub RemplacerStyle()
    Dim oDocument as Object, searchDescriptor As Object
    Dim Args(0) as New com.sun.star.beans.PropertyValue
    Dim i as Integer
    Args(0).Name = "Hidden"
    Args(0).Value = True 'LG essaye dejà avec false

       FOR i = 0 to UBound(monTab)
          oDocument =
StarDesktop.loadComponentFromURL(monTab(i),"_blank",0,Args())
          searchDescriptor = oDocument.createReplaceDescriptor
             With searchDescriptor
                .SearchString = "Texte prof"
                .ReplaceString = "Blanc"
                .SearchStyles = True
             End With
          oDocument.replaceAll(searchDescriptor)
          oDocument.Store()
          ExportPDF(oDocument,monTab(i))
       Next i
    End Sub

    Sub ExportPDF(oDoc as Object,monFichier as String)
    Dim oURL as String
    Dim Args(0) as New com.sun.star.beans.PropertyValue
        ' Cemoi: que contient monFichier? à première vue c'est vide!
       oURL = Left(monFichier,CInt(Len(monFichier))-3) & "pdf"
       Args(0).Name = "FilterName"
       Args(0).Value = "writer_pdf_Export"
       oDoc.storeToURL(oUrl,args())
       oDoc.Close(True)
       Kill(monFichier)
    End Sub


Le 29 mai 2015 14:13, Cemoi Cemoi <[email protected]> a écrit :

> voici la dernière versio nde la macro mais je n'arrive pas à bien
> comprendre comment gérer la recursivité dans la première partie.
>
> l'etat de dir() est global, c'est a dire que l'on peut pas utiliser une
> boucle dir() dans une boucle dir() la parade, serai de faire une passe en
> stockant dans un tableau tous les chemins de repertoires avec un dir()
> puis ensuite boucler sur ce tableau, et ainsi le dir() sur les odt passera
> en récursif
> mais je n'arrive pas à comprendre comment appliquer ça dans la macro...
>
>
> Option Explicit
> 'LG Global monTab() as String
> dim monTab() as String
>
> Sub CopierFichier
> Dim Chemin as String, NomFichier as String, Fichier(), NewName as String
> Dim X as Integer
>
> ' LG initialise
> Redim monTab(0)
>
>    Chemin = ConvertToURL("/home/cemoi/Documents/bac/seconde/")'le chemin
> est à adapter à l'emplacement des fichiers
>    NomFichier = Dir(Chemin & "Cours*.odt")
>    X = 0
>    Do While NomFichier <> ""
>       Fichier = Split(NomFichier,".")
>       NewName = Fichier(0) & "_eleve.odt"
>      'LG
>      X = X +1
> '      reDim Preserve monTab(X)
>    redim Preserve monTab(1 to X)
>       monTab(X) = ConvertToURL(Chemin & NewName)
>       Filecopy ConvertToURL(Chemin & NomFichier), monTab(X)
>
>       NomFichier = Dir()
>      ' LG inutile X = X + 1
>    Loop
>    RemplacerStyle
> End Sub
>
> Sub RemplacerStyle()
> Dim oDocument as Object, searchDescriptor As Object
> Dim Args(0) as New com.sun.star.beans.PropertyValue
> Dim i as Integer
>    Args(0).Name = "Hidden"
>    Args(0).Value = True 'LG essaye dejà avec false
>
> FOR i=1 to UBound(monTab)
> 'LG  For i = 0 to UBound(monTab)
>       oDocument =
> StarDesktop.loadComponentFromURL(monTab(i),"_blank",0,Args())
>       searchDescriptor = oDocument.createReplaceDescriptor
>       With searchDescriptor
>          .SearchString = "Texte prof"
>          .ReplaceString = "Blanc"
>          .SearchStyles = True
>       End With
>       oDocument.replaceAll(searchDescriptor)
>       oDocument.Store()
>       ExportPDF(oDocument,monTab(i))
>    Next i
> End Sub
>
> Sub ExportPDF(oDoc as Object,monFichier as String)
> Dim oURL as String
> Dim Args(0) as New com.sun.star.beans.PropertyValue
>    oURL = Left(monFichier,CInt(Len(monFichier))-3) & "pdf"
>    Args(0).Name = "FilterName"
>    Args(0).Value = "writer_pdf_Export"
>    oDoc.storeToURL(oUrl,args())
>    oDoc.Close(True)
>    Kill(monFichier)
> 'la MsgBox ne sert à rien
>   ' MsgBox("Le fichier " & ConvertFromURL(oURL) & " à été créé")
> End Su
>
>
> Le 25 mai 2015 15:54, Cemoi Cemoi <[email protected]> a écrit :
>
>> il y a peut eter un problème de casse effectivement mais ce que je
>> aperçois c'est que la première partie n'est pas recursive et le but de la
>> macro c'est de traiter toute une arborescense. Il faudrait boucler sur les
>> dossiers et faire l'appel moi même?
>>
>> Merci pour votre aide.
>>
>>
>>
>> Le 22 mai 2015 14:27, claude <[email protected]> a
>> écrit :
>>
>>> Bonjour,
>>>
>>> Dans le batch il y
>>>
>>> '*cours*.odt' \
>>>
>>> dans la macro
>>>
>>> "Cours*.odt"
>>>
>>> Si les noms des fichiers ne commencent pas par "cours" cela ne
>>> fonctionne pas.
>>>
>>> J'ai fait un test de ta macro et elle fonctionne (sous windows). Sous
>>> Linux n'y-a-t-il pas aussi le problème de la casse sur les noms de fichiers
>>> ?)
>>>
>>> Claude
>>>
>>> Cemoi Cemoi a écrit :
>>>
>>>> Bonjour,
>>>>
>>>> je veux reproduire ce que je faisais avec find en shell en fait pour que
>>>> tout soit dans la macro et surtout que pour que cela puisse servir à
>>>> d'autres. Je m'explique: si je fais la recherche le filtrage et le
>>>> renomage
>>>> des fichiers avec le shell j'aurais une macro qui ne peux pas faire
>>>> tout le
>>>> travail à elle seule, elle perd donc de son intérêt (je parle pour
>>>> l'interet commun dans l'optique d'être réutilisé).
>>>>
>>>> Avant de me lancer dans cette macro je faisais un:
>>>>
>>>> <https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=47475#>find
>>>>
>>>> /home/cemoi/Documents/cible -type f -mtime -1 -iname "*eleve*.odt"
>>>> -execdir
>>>> libreoffice --headless --convert-to pdf '{}' \;
>>>>
>>>> Ca veut dire: cherche et trouve dans toute l'arborescence de
>>>> /home/cemoi/Documents/cible tous les fichiers modifié il y a 24h ou
>>>> moins
>>>> de 24h ayant les caractéres (sans prendre en compte la casse) eleve dans
>>>> leur nom et ayant comme extension odt puis ça passe les resultats à
>>>> libreoffice qui est exécuté en -headless pour convertir en pdf tous les
>>>> fichiers trouvé.
>>>>
>>>> Attention ici chaque pdf est mis au même endroit que le fichier source
>>>> avec
>>>> lequel il est généré.
>>>>
>>>> Comme on a des problèmes pour tenir à jour tous les fichiers eleves (et
>>>> ça
>>>> prend aussi pas mal de temps) je me suis dis qu'il serai bon que cela
>>>> soit
>>>> automatiser... en remplaçant le styleprof par des ___ comme cela il ne
>>>> resterai plus qu'à générer le pdf pour que cela sorte le document eleve.
>>>>
>>>>
>>>> pour le moment je fais la recherche de tous les fichiers odt contenant
>>>> le
>>>> mot cours puis j'y ajoute le suffix _eleve puis je le copie comme ça je
>>>> conserve ma source voila le code:
>>>>
>>>> #! /bin/bash
>>>> IFS=
>>>>
>>>> find /home/cemoi/Documents/bactma/seconde/ \
>>>>      -type f \
>>>>      -iname '*cours*.odt' \
>>>>      -not -iname '*_eleve.odt' \
>>>>      -print0 |
>>>>      while read -rd '' name
>>>>      do
>>>>          new_name=$(echo $name|sed 's/\.odt$/_eleve.odt/')
>>>>          if [ "$name" -nt "$new_name" ]
>>>>          then
>>>>              cp "$name" "$new_name"
>>>>          fi
>>>>      done
>>>>
>>>> la macro que je veux faire doit faire en premier ce script (si dessus)
>>>> puis
>>>> remplacer les caractéres des styles text prof par des_____à tous les
>>>> *eleve.odt puis enregistrer ces midifications et enfin générer un pdf
>>>> de ce
>>>> fichier.
>>>>
>>>> Attention la macro parcours une arborecense elle est recursive.
>>>>
>>>> Quand la macro sera terminé elle sera exploité sur un serveur de
>>>> fichiers
>>>> sur lequel des enseignants travail chaque jour. les cours enseignants
>>>> seront traité par la macro ce qui sortira tous les
>>>> cours_calculs_flexion_eleve.odt (ici je parle du fichier déja modifié
>>>> par
>>>> la macro) et cours_calculs_flexion_eleve.pdf à partir du fichier
>>>> cours_calculs_flexion.odt (qui est le document complet sur lequel les
>>>> enseignants travail). Sur le serveur de fichiers il y a une branche de
>>>> l'arborecsence pour la "fabrication des cours" et une branche "cours
>>>> terminé et /ou en production.
>>>>
>>>> Voila la macro mais elle n'est pas terminé:
>>>>
>>>>
>>>> Option Explicit
>>>> 'LG Global monTab() as String
>>>> dim monTab() as String
>>>>
>>>> Sub CopierFichier
>>>> Dim Chemin as String, NomFichier as String, Fichier(), NewName as String
>>>> Dim X as Integer
>>>>
>>>> ' LG initialise
>>>> Redim monTab(0)
>>>>
>>>>     Chemin = ConvertToURL("/home/cemoi/Documents/bac/seconde/")'le
>>>> chemin
>>>> est à adapter à l'emplacement des fichiers
>>>>     NomFichier = Dir(Chemin&  "Cours*.odt")
>>>>     X = 0
>>>>     Do While NomFichier<>  ""
>>>>        Fichier = Split(NomFichier,".")
>>>>        NewName = Fichier(0)&  "_eleve.odt"
>>>>       'LG
>>>>       X = X +1
>>>> '      reDim Preserve monTab(X)
>>>>          redim Preserve monTab(1 to X)
>>>>        monTab(X) = ConvertToURL(Chemin&  NewName)
>>>>        Filecopy ConvertToURL(Chemin&  NomFichier), monTab(X)
>>>>
>>>>        NomFichier = Dir()
>>>>       ' LG inutile X = X + 1
>>>>     Loop
>>>>     RemplacerStyle
>>>> End Sub
>>>>
>>>> Sub RemplacerStyle()
>>>> Dim oDocument as Object, searchDescriptor As Object
>>>> Dim Args(0) as New com.sun.star.beans.PropertyValue
>>>> Dim i as Integer
>>>>     Args(0).Name = "Hidden"
>>>>     Args(0).Value = True 'LG essaye dejà avec false
>>>>
>>>> FOR i=1 to UBound(monTab)
>>>>   'LG  For i = 0 to UBound(monTab)
>>>>        oDocument =
>>>> StarDesktop.loadComponentFromURL(monTab(i),"_blank",0,Args
>>>> ())
>>>>        searchDescriptor = oDocument.createReplaceDescriptor
>>>>        With searchDescriptor
>>>>           .SearchString = "Texte prof"
>>>>           .ReplaceString = "Blanc"
>>>>           .SearchStyles = True
>>>>        End With
>>>>        oDocument.replaceAll(searchDescriptor)
>>>>        oDocument.Store()
>>>>        ExportPDF(oDocument,monTab(i))
>>>>     Next i
>>>> End Sub
>>>>
>>>> Sub ExportPDF(oDoc as Object,monFichier as String)
>>>> Dim oURL as String
>>>> Dim Args(0) as New com.sun.star.beans.PropertyValue
>>>>     oURL = Left(monFichier,CInt(Len(monFichier))-3)&  "pdf"
>>>>     Args(0).Name = "FilterName"
>>>>     Args(0).Value = "writer_pdf_Export"
>>>>     oDoc.storeToURL(oUrl,args())
>>>>     oDoc.Close(True)
>>>>     Kill(monFichier)
>>>>     MsgBox("Le fichier "&  ConvertFromURL(oURL)&  " à été créé")
>>>> End Sub
>>>>
>>>>
>>>>
>>>> à la ligne oURL = Left(monFichier,CInt(Len(monFichier))-3)&  "pdf" ça
>>>> retourne l'agument n'est pas facultatif
>>>> Je ne comprends pas ce que contient la variable momFichier on dirait
>>>> qu'elle est vide! Et je ne comprends pas pourquoi...
>>>>
>>>> Merci pour votre aide!
>>>>
>>>>
>>>
>>> --
>>> Envoyez un mail à [email protected] pour savoir
>>> comment vous désinscrire
>>> Les archives de la liste sont disponibles à
>>> http://listarchives.libreoffice.org/fr/users/
>>> Tous les messages envoyés sur cette liste seront archivés publiquement
>>> et ne pourront pas être supprimés
>>>
>>
>>
>

-- 
Envoyez un mail à [email protected] pour savoir comment vous 
désinscrire
Les archives de la liste sont disponibles à 
http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne 
pourront pas être supprimés

Répondre à