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

 Delphi Discussion :

Récupérer une chaine de mot depuis un point


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut Récupérer une chaine de mot depuis un point
    D6 et Windows 10 64bits

    Bonjour à toutes et à tous,

    Avec l'utilisation de "FFMPEG", je sauve des indications dans un fichier texte.

    Code pour récupérer l'information : //[ffmpeg] Destination: Audio\El Condor Pasa - Paul Simon & Garfunkel.mp3

    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
     
    var
    UnStringList:TStringList;
     
    begin
      //Création du STringList
      UnStringList:=TStringList.Create;
      try
         //Chargement du fichier texte
         UnStringList.LoadFromFile(chappli + 'Titre.txt');    
     
         Ednom.Text:=UnStringList.strings[UnStringList.Count-2];
     
      finally
     
         //Destruction du StringList
         UnStringList.Free;
      end;
    J'obtiens bien la ligne complète dans mon Tedit mais j'aimerai obtenir que tout ce qui est à droite de "Audio\" soit "El Condor Pasa - Paul Simon & Garfunkel.mp3".

    Ce qui est à droite varie pour chaque fichier .mp3 !

    J'ai testé 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
    28
     
    function GetEveryThingAfter(AfterWhat: String; var TextFile: TStringList): String;
    var
    I: Integer;
    Tmp: Integer;
    S: String;
    begin
    S := '';
    Tmp := Pos(AfterWhat, TextFile.Text) + Length(AfterWhat);
    Result := Copy(S, Tmp, Length(TextFile.Text));
    end;
     
    var
    Contents: TStringList;
    S: String;
    begin
    Contents := TStringList.Create; // Tu crées ta liste
    try
    if FileExists(chappli + 'Titre.txt') then // Si ton fichier existe alors ...
    Contents.LoadFromFile(chappli + 'Titre.txt'); // Tu ouvres la liste
    S := GetEveryThingAfter('[Audio\]', Contents); // Tu isoles tout après
    Memo1.Lines.Clear; // On vide avant
    Memo1.Lines.Text := S; // Tu obtiens le tout sous forme de chaîne chariot
    Ednom.Text := S;
    finally
    Contents.Free; // Tu libères ta liste
    end;
    end;
    Je n'obtiens pas le résultat escompté.

    Merci d'une aide éventuelle.

    @+,

    cincap

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    Avec mes tests, ceci fonctionne sans fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ednom.text := (RightStr(ednom.text,Length(ednom.text)-28));
    En effet tout ce qui se trouve à gauche du titre sera toujours avec le même nombre de caractères contrairement au titre du morceau soit "28".

    Reste plus qu'a détecter la fin de l'exécution de mon fichier .bat afin de pouvoir lire le fichier mp3 avec le Médiaplayer de Windows.

    @+,

    cincap

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour
    Pourquoi pas un StringReplace ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Memo1.Lines.Text:=StringReplace(Contents.Text,'Audio\','',[rfReplaceAll]);
    pas besoin de fonction

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ SergioMaster, merci de ta réponse, en effet c'est aussi facile avec ta suggestion en utilisant le Tmemo.

    Dans le projet de test, j'ai éliminé le Tmemo pour utiliser que le Tedit qui me donne aussi l'information du titre de mon fichier .mp3

    Il faut savoir que j'utilise un fichier .bat pour extraire le .mp3.

    Dans ce fichier .bat, j'ai mis une instruction qui crée un fichier de fin et qui se nomme "Fin.txt" dans le même répertoire que l'application peut importe le contenu.

    Pour ne pas provoquer d'exception, je dois connaitre le moment de création concernant ce fichier "Fin.txt" pour rendre le Tbutton qui se nomme "Play" enabled afin de l'ouvrir avec le médiaplayer par défaut.

    Quelle aventure mais je m'occupe l'esprit qui m'éloigne de mes problèmes de santé.

    Je dois peut-être m'orienter vers une boucle mais mes tests ne sont pas bon.

    @+,

    cincap

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    J'avoue n'avoir rien compris mais pas grave

    autre truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Ednom.Text:=Copy(UnStringList.strings[UnStringList.Count-2],Pos('Audio\')+1+Length('Audio\'));
    ou plus propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
    UnStringList:TStringList;
     
    function titre(TitreDansListe,Prefixe : String) : String;
    begin
      result:=Copy(TitredansListe,Pos(Prefixe)+1+Length(prefixe));
    end;
     
    begin
      ... 
      edtnom.text:=titre(UnStringList.strings[UnStringList.Count-2],'Audio\');
    end;

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ SergioMaster, merci pour tes suggestions.

    Dans la dernière suggestion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ednom.Text:=Copy(UnStringList.strings[UnStringList.Count-2],Pos('Audio\')+1+Length('Audio\'));
    Erreur "Pas assez de paramètres originaux".

    J'avoue n'avoir rien compris mais pas grave
    En fait pour le média Player il lui faut un nom de fichier "monfichier.mp3" qui s'affichera dans le Tedit, c'est ok

    Ce nom est extrait du fichier .bat qui est lancé mais qui se crée par celui-ci qu'à la fin de l'exécution de ce fichier soit il se nommera "Fin.txt" et lira le fichier "Titre.txt" pour extraire le nom.

    Donc si je le lance le média Player par défaut avant la fin du traitement de mon fichier .bat j'aurai une exception car ce nom n'existe pas encore dans le Tedit.

    Et seul l'existence de ce fichier "Fin.txt" m'indique que le média Player peut être appelé car le processus est terminé et le nom du fichier est dans le Tedit.

    Je dois donc en permanence vérifier le dossier de l'application si le fichier "Fin.txt" existe pour le lire avec le média Player par défaut.

    @+,

    cincap

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

Discussions similaires

  1. [RegEx] comment récupérer une chaine entre deux mots
    Par mat8883 dans le forum Langage
    Réponses: 3
    Dernier message: 14/11/2012, 19h29
  2. Réponses: 2
    Dernier message: 15/02/2007, 22h00
  3. Réponses: 5
    Dernier message: 22/06/2006, 17h19
  4. Récupérer une chaine de caractère dans une page
    Par BrunS dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 14h28
  5. [IO]Récupérer une chaine texte dans un flux HTTP
    Par elitost dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/03/2005, 10h39

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