création un moulinette .bat

création un moulinette .bat - VB/VBA/VBS - Programmation

Marsh Posté le 16-05-2012 à 10:29:38    

Bonjour à tous et merci d'avance pour votre lecture du post.
 
Je souhaiterais faire la chose suivante:
 
je possède un fichier texte "Extrait1" qui possède plusieurs nombre de lignes avec une structure bien particulière pour être plus concret un exemple:
 
0400107040040200TND305510110981399110512
0400107680040200TND305510110981399110512
0400107060040200TND305510110981399110512
0400107040040200TND305510110981399110512
 
çàd un fichier de log qui se rempli au fur et à mesure.
 
Ce fichier ne me convient pas dans sa forme "Extrait1" et j'aimerais qu'il apparaisse après transformation comme suit:
 
0400107040040200TND305510110981307110512
0400107680040200TND305510110981352110512
0400107060040200TND305510110981330110512
0400107040040200TND305510110981307110512
 
çàd si trouve à la position aprés 7 chiffres 0400 il remplace 99 par 07 qui se trouve aprés 32 chiffres &  
si trouve à la position aprés 7 chiffres 6800 il remplace 99 par 52 qui se trouve aprés 32 chiffres &
si trouve à la position aprés 7 chiffres 0600 il remplace 99 par 30 qui se trouve aprés 32 chiffres
, sauvegarde dans un nouveau fichier texte "Extrait2"
 
J'aimerais faire un programme batch tout bête faisant cela et travaillant toutes les 10 minutes par exemple.
 
Comment puis-je opérer proprement?
 
Merci beaucoup

Reply

Marsh Posté le 16-05-2012 à 10:29:38   

Reply

Marsh Posté le 16-05-2012 à 13:44:02    

Les fonctions disponibles dans un .bat sont pas très évoluées. Mieux vaudrait un langage de script pour traiter des chaînes de caractères (vb/vbs, php, python, perl...). Après, le script (ou exe) serait appelé périodiquement par le planificateur de tâches.
 
Perso, je le ferai en php, le script étant appelé en ligne de commande.
 
Si t'étais sous Linux, tu pourrais utiliser awk, particulièrement adapté dans cette situation ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-05-2012 à 14:43:18    

ok Merci rufo :)
 
je besoin de ce fonction par n'importe quel langage. svp tu peut me faire une moulinette utilisant ( vd/vbd, php ...)
 
 
 
Merci  ;)

Reply

Marsh Posté le 16-05-2012 à 15:36:12    

dragonwood a écrit :

ok Merci rufo :)
 
je besoin de ce fonction par n'importe quel langage. svp tu peut me faire une moulinette utilisant ( vd/vbd, php ...)
 
 
 
Merci  ;)


 
Merci de t'exprimer de manière un peu plus intelligible...  
 
Sinon, non, je ne te ferai pas la moulinette (cf les règles de ce forum). Par contre, si tu nous présentes du code ici et que tu rencontres des difficultés, on sera heureux de t'apporter de l'aide (mais toujours en te donnant des pistes/idées, pas en te faisant le boulot à ta place). :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-05-2012 à 18:38:40    

Spoiler :


Option Explicit  
 
Private Function Chemin(ByVal sFichier As String) As String  
Dim i As Integer  
Dim sChemin As String  
    sChemin = ""  
    If Dir$(sFichier) = "" Then Exit Function  
    For i = 0 To UBound(Split(sFichier, "\" )) - 1  
      sChemin = sChemin & Split(sFichier, "\" )(i) & "\"  
    Next i  
    Chemin = sChemin  
End Function  
 
Private Sub Correction(ByVal sNomFichier As String)  
Dim sIn As String  
Dim sOut As String  
Dim iNumFichier1 As Integer, iNumFichier2 As Integer  
Dim sNomFichier2 As String, sCheminFichier As String  
 
    Close  
     
    sCheminFichier = Chemin(sNomFichier)  
    sNomFichier2 = sCheminFichier & "Corr_" & NomDuFichier(sNomFichier)  
     
    iNumFichier1 = FreeFile  
    Open sNomFichier For Input As #iNumFichier1  
        iNumFichier2 = FreeFile  
        Open sNomFichier2 For Output As #iNumFichier2  
            Do While Not EOF(iNumFichier1)  
                Line Input #iNumFichier1, sIn  
                Select Case Mid$(sIn, 8, 4)  
                    Case "0400"  
                        sOut = Left$(sIn, 32) & "07" & Mid$(sIn, 35)  
                        Print #iNumFichier2, sOut  
                    Case "6800"  
                        sOut = Left$(sIn, 32) & "62" & Mid$(sIn, 35)  
                        Print #iNumFichier2, sOut  
                    Case "3800"  
                        sOut = Left$(sIn, 32) & "40" & Mid$(sIn, 35)  
                        Print #iNumFichier2, sOut  
                End Select  
            Loop  
        Close #iNumFichier2  
    Close #iNumFichier1  
End Sub  
 
Private Function NomDuFichier(ByVal sFichier As String) As String  
    With CreateObject("Scripting.FileSystemObject" )  
      On Error Resume Next  
          NomDuFichier = .GetFileName(sFichier)  
      On Error GoTo 0  
    End With  
End Function  
 
Sub SelectionTXT()  
Dim Fichier As Variant  
Dim i As Long  
 
    ChDir ThisWorkbook.Path  
    Fichier = Application.GetOpenFilename("Fichier TXT (*.txt), *.txt", , "Sélectionner un ou plusieurs fichier(s)", , True)  
    If TypeName(Fichier) = "Boolean" Then Exit Sub  
 
    For i = 1 To UBound(Fichier)  
        Correction Fichier(i)  
    Next i  
End Sub


voila mon code sous macro Excel mais ce code modifie juste les 4 première lignes je veux modifier tous les lignes ...??

Reply

Marsh Posté le 16-05-2012 à 21:39:35    

Ta proposition (bien qu'elle provient d'une bonne foi) est hors-charte, tu risques d'avoir des problèmes


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 16-05-2012 à 22:24:04    

Re, surtout que la correction a été faite sur http://forum.hardware.fr/hfr/Progr [...] 7000_1.htm
 
Je ne saisis pas le pourquoi de ce va et vient ?


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed