IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Recupération après caractère


Sujet :

VBScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut Recupération après caractère
    Bonjour,

    J'ai 26 000 lignes ou j'ai des groupes de musique et des titres de musique et j'aimerais récupérer juste le titre, grâce à un script VBS.

    En générale les lignes sont structurées comme ceci :

    Children Of Bodom - Silent Night,Bodom Night
    Children Of Bodom - Six pounder (Solo2)
    Children Of Bodom - Taste of my sythe(main part)
    Children Of Bodom - The Art Of Alexi Laiho
    Children Of Bodom - The Art Of Children Of Bodom
    Children Of Bodom - The Nail
    Children Of Bodom - Touch Like An Angel Of Death
    Children Of Bodom - Towards Dead End
    Children Of Bodom - You 're Better Off Dead

    Mais il arrive que parfois on tombe sur des lignes où il n'y a que le titre :

    Touch Like An Angel Of Death
    Towards Dead End
    You 're Better Off Dead

    Et aussi il peut arriver qu'il y est le le nom du groupe et le titre de musique, mais que le titre est composé de - par exemple :

    Children Of Bodom - You're-Better-Off-Dead

    Et même que le tiret qui sépare le groupe est le nom soit collé, d'un coté ou de l'autre :

    Children Of Bodom- You're-Better-Off-Dead
    Children Of Bodom -Silent Night,Bodom Night
    Children Of Bodom-Touch Like An Angel Of Death

    Est-ce qu'il est possible de réaliser un script VBS qui extrait les titres des lignes, en les écrivant dans un autre fichier texte, dans le même ordre.

    Merci d'avance.

    John.

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    voici une petite approche en utilisant les RegExp
    testé avec votre petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Const ForReading = 1
    Const ForWriting = 2
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("f.txt",ForReading)
    Set objFiles = FSO.OpenTextFile("fic3.txt",ForWriting,True)
    sResults = f.ReadAll
    Set objRegex = new RegExp
    objRegex.Pattern = "-(.\w+.*)"
    objRegex.Global = True
    objRegex.IgnoreCase = True
    Set Matches = objRegex.Execute(sResults)
    For Each Match in Matches   
    Result=objRegex.Replace(Match.Value,"$1")
        MsgBox Result,64,"Résultat !"
        objFiles.WriteLine Result
    Next

  3. #3
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Voici un exemple de test avec File2Read.txt:
    Children Of Bodom - Silent Night,Bodom Night
    Children Of Bodom - Six pounder (Solo2)
    Children Of Bodom - Taste of my sythe(main part)
    Children Of Bodom - The Art Of Alexi Laiho
    Children Of Bodom - The Art Of Children Of Bodom
    Children Of Bodom - The Nail
    Children Of Bodom - Touch Like An Angel Of Death
    Children Of Bodom - Towards Dead End
    Children Of Bodom - You 're Better Off Dead
    Children Of Bodom - You're-Better-Off-Dead
    Children Of Bodom- You're-Better-Off-Dead
    Children Of Bodom -Silent Night,Bodom Night
    Children Of Bodom-Touch Like An Angel Of Death
    et qu'on applique ce vbscript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Const ForReading = 1
    Const ForWriting = 2
    Set ws = CreateObject("Wscript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("File2Read.txt",ForReading)
    Set objFiles = FSO.OpenTextFile("Titre.txt",ForWriting,True)
    sResults = f.ReadAll
    Set objRegex = new RegExp
    objRegex.Pattern = "-(.\w+.*)|- (.\w+.*)"
    objRegex.Global = True
    objRegex.IgnoreCase = True
    Set Matches = objRegex.Execute(sResults)
    For Each Match in Matches   
    Result=objRegex.Replace(Match.Value,"$1")
        MsgBox Result,64,"Résultat !"
        objFiles.Write Result
    Next
    ws.Run "Titre.txt",True
    et on obtient comme résultat dans le fichier Titre.txt
    Silent Night,Bodom Night
    Six pounder (Solo2)
    Taste of my sythe(main part)
    The Art Of Alexi Laiho
    The Art Of Children Of Bodom
    The Nail
    Touch Like An Angel Of Death
    Towards Dead End
    You 're Better Off Dead
    You're-Better-Off-Dead
    You're-Better-Off-Dead
    Silent Night,Bodom Night
    Touch Like An Angel Of Death

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Wow ! Impressionnant. C'est quoi les RegExp ?

    Sinon ça ne marche pas totalement. Si je prends comme exemple cette ligne là.

    While We Cry (intro-live)

    Elle n'a pas d'auteur, il n'y a que le titre, mais vu qu'il contient un - ça le coupe donc ça donne juste

    live)

    Et au résultat je devrais avoir 25169 lignes et je n'en ai que 21787 dans Titre.txt. Et aussi chaque ligne début avec un espace, pourquoi ?

  5. #5
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    une autre variante, mais sans passer par les RegExp:

    untested.vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Const ForReading = 1
    Set ws = CreateObject("Wscript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("Titre.txt",ForReading)
    sResults = f.ReadAll
    msgbox Trim(Replace(Replace(sResults,"Children Of Bodom", ""),"-",""))

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Je n'ai pas qu'un groupe de musique ^^.

    Le script d'hackoofr est quasi parfait, le seul problème c'est qu'il à supprimé des lignes et coupé quelque titre

  7. #7
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    essaye ceci, j'ai modifié un peu le code de hackoofr

    untested.vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Const ForReading = 1
    Const ForWriting = 2
    Set ws = CreateObject("Wscript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("hello.txt",ForReading)
    Set objFiles = FSO.OpenTextFile("Titre.txt",ForWriting,True)
    sResults = f.ReadAll
    Set objRegex = new RegExp
    objRegex.Pattern = "(Children Of Bodom)?(\s*-\s*)?(.*)"
    objRegex.Global = True
    objRegex.IgnoreCase = True 
     
     
    For Each Match in objRegex.Execute(sResults)  
      Result=Match.SubMatches(2)
      objFiles.Write Result
    Next

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Salut et merci pour ta réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objRegex.Pattern = "(Children Of Bodom)?(\s*-\s*)?(.*)"
    le problème de cette ligne c'est que je n'ai pas que ce groupe dans mon fichier. J'ai plus de 3000 groupes.

  9. #9
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    Citation Envoyé par Johngtrs Voir le message
    Salut et merci pour ta réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objRegex.Pattern = "(Children Of Bodom)?(\s*-\s*)?(.*)"
    le problème de cette ligne c'est que je n'ai pas que ce groupe dans mon fichier. J'ai plus de 3000 groupes.
    alors essayes ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Const ForReading = 1
    Const ForWriting = 2
    Set ws = CreateObject("Wscript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("lol.txt",ForReading)
    Set objFiles = FSO.OpenTextFile("Titre.txt",ForWriting,True)
    sResults = f.ReadAll
    Set objRegex = new RegExp
    objRegex.Pattern = "((.*?\s*-\s*)?)(.*)"
    objRegex.Global = True
    objRegex.IgnoreCase = True 
     
     
    For Each Match in objRegex.Execute(sResults)  
        Result=Match.SubMatches(2)
        objFiles.Writeline Result
       'msgbox Match.SubMatches.Count
    Next
    dans ton cas il vaut mieux traiter chaque ligne à part.

    tu peux aussi utiliser un fichier de commandes NT si tu veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @echo off
    for /f "delims=" %%a in (fichier.txt) do set "o=%%a"&call echo(%%o:*-=%%
    pause

  10. #10
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Hum, je sais pas si ça fonctionne, mais ça à l'air.

    Je peux pas dire si c'est bon, car a chaque fois il y a 2 espaces entre chaque lignes. J'ai essayé plusieurs script pour enlever les espaces entre les lignes mais j'ai réussi à n'en supprimer qu'une...

    Donc maintenant il y a 1 espace entre chaque lignes et j'arrive pas à les supprimer.

    Si j'ai des espaces entre les lignes, ma base de données sera fausse, comment faire ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    J'ai réussi à supprimer les espaces comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Const cteLecture = 1
    Const cteEcriture = 2
    Const cteFichierSrc = "Titre2.txt"
    Const cteFichierDes = "Titre3.txt"
     
    	Dim objFSO, objFichierSrc, objFichierDes, Texte
     
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	Set objFichierSrc = objFSO.OpenTextFile(cteFichierSrc, cteLecture)
    	Set objFichierDes = objFSO.CreateTextFile(cteFichierDes, cteEcriture)
     
    	While Not objFichierSrc.AtEndOfStream
    		Texte = objFichierSrc.ReadLine
    		'Texte = Trim(Texte)
    		If ( Len(Texte) > 0 ) Then
    			objFichierDes.Write Texte
    		End If
    	Wend
     
    	objFichierSrc.Close
    	objFichierDes.Close
     
    	Set objFichierSrc = Nothing
    	Set objFichierDes = Nothing
    	Set objFSO = Nothing
     
    WScript.Quit(0)
    Et j'ai pu voir que ton script marche à merveille.

    Merci à vous tous, vous m'avez super bien aidé. Très gentil de votre part.

    A bientôt.

    John.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] modifier chaine ligne n après caractère "="
    Par T3rm1nat0r dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 27/11/2012, 19h31
  2. [TinyMCE] Recupérer les caractères spéciaux
    Par MidOne dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 27/03/2012, 13h29
  3. Recupérer x caractères d'un champ
    Par glove dans le forum Doctrine2
    Réponses: 2
    Dernier message: 14/11/2011, 18h54
  4. recupération apres crash driver
    Par gargle dans le forum Windows
    Réponses: 1
    Dernier message: 22/09/2006, 18h02
  5. Réponses: 1
    Dernier message: 23/01/2006, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo