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

Scripts/Batch Discussion :

Extraire une chaîne de caractère avec une boucle for et delims


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 20
    Points
    20
    Par défaut Extraire une chaîne de caractère avec une boucle for et delims
    Bonjour à tous,

    Même si j'ai déjà lu plusieurs questions et réponses sur le sujet, je ne suis malheureusement pas assez doué en scripting DOS pour arriver à adapter d'autres réponses à ma problématique
    J'espère donc trouver quelqu'un d'indulgent pour m'aider

    Voici la situation :

    Disons que j'ai une variable $html qui contient la chaîne de caractère suivante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
                                            <source src="http://videos.dummysite.com/videos/video01.mp4" type="video/mp4"/>

    Ce que je voudrais récupérer, c'est l'URL contenu entre les 2 premières guillemets (et uniquement les 2 premières guillemets, pas ce qu'il y a derrière "type")
    L'idée étant d'obtenir au final, juste ce résultat :
    http://videos.dummysite.com/videos/video01.mp4

    Entre le fait d'utiliser un délimiteur qui soit des guillemets et qu'apparemment, il faut préfixer par le symbole ^ pour qu'il puisse être utilisé et le fait qu'il y ait plusieurs guillemets, je suis un peu perdu

    Merci par avance pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Dans ton cas j'utiliserais plutôt le signe = et l'espace comme délimiteurs, comme ceci :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=3 delims== " %%A in ("<source src="http://videos.dummysite.com/videos/video01.mp4" type="video/mp4"/>") do echo %%~A

    Est-ce que ça te convient ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Cela fonctionne parfaitement, mais uniquement si le fichier stocké sur le site web ne contient pas d'espace
    Si, en revanche, tu mets une URL, par exemple, http://videos.dummysite.com/videos/this is video01.mp4, et bien là, il n'extract pas le nom complet mais s'arrête au premier espace

  4. #4
    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
    salem,

    l'une des solutions possible est d'échapper le caractère de séparation dans la boucle forindo, une chose du genre:

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f tokens^=^2^ delims^=^" %%A in ("<source src="http://videos.dummysite.com/videos/this is video01.mp4" type="video/mp4"/>") do echo %%~A

    dans ce cas les guillemets sont traiter non pas comme des caractères spéciaux par le caractère "^" qui a pour rôle dans ce cas de rendre le caractère qui le suit un caractère normal

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Merci pour cette solution qui effectivement, fonctionne parfaitement
    En revanche, je n'arrive pas à l'intégrer dans mon script global pour lequel j'ai posé cette question et donc il faut que j'expose ici ce que fais mon script :

    L'idée de départ est la suivante : j'ai un fichier ascii que j'appelle pages.txt qui contient, pour chaque ligne, une URL vers une page html
    Concrètement, sur chaque page, dans le code html, il y a un lien vers une vidéo
    L'idée générale étant d'automatiser le téléchargement de chaque vidéo de chaque page

    Dans mon script, cela donne ceci (c'est un extrait, je n'ai pas mis la fin) :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set /a PAGE=80
    set /a NBVID=1
    setlocal ENABLEDELAYEDEXPANSION
     
    for /F "tokens=*" %%a in (Pages.txt) do (
    	curl -o !PAGE!-!NBVID!.html %%a --cacert cacert.pem -b cookies.txt --silent
     
    	for /f "tokens=3 delims== " %%b in ('findstr /c:"source src=" !PAGE!-!NBVID!.html') do (
    		curl -o !PAGE!-!NBVID!.mp4 %%~b --cacert cacert.pem -b cookies.txt --silent

    Chaque page contenue dans le fichier pages.txt (première boucle for) est téléchargée localement avec un nom composé d'un numéro de page et d'un numéro de vidéo (variable PAGE & NBVID)
    Puis, pour chaque page, j'utilise la commande dos "findstr" pour trouver la seule et unique ligne contenant le fameux "source src=" et de cette ligne, je veux isoler juste l'url vers la vidéo que je télécharge à ce moment là aussi

    Donc, j'avoue ne pas avoir réussi à intégré le fait d'entourer encore de guillemets supplémentaires la solution que tu me proposes dans mon script ci-dessus
    (désolé, je suis un boulet )

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Personne ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/05/2012, 15h27
  2. Réponses: 4
    Dernier message: 24/05/2010, 13h06
  3. Comment hacher une chaîne de caractères avec MD5
    Par dalilnet dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 20/08/2008, 14h44
  4. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  5. Extraction d'une chaîne de caractère avec SQL
    Par opeo dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 28/07/2006, 15h36

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