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

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    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
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    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
    Inscrit en
    janvier 2007
    Messages
    11 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 284
    Points : 29 232
    Points
    29 232
    Billets dans le blog
    29
    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    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
    Inscrit en
    janvier 2007
    Messages
    11 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 284
    Points : 29 232
    Points
    29 232
    Billets dans le blog
    29
    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;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    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

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 284
    Points : 29 232
    Points
    29 232
    Billets dans le blog
    29
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ 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".
    Ah, je ne savais pas si cela passait, j'ai lu quelque-part que le dernier paramètre n'était pas obligatoire, j'aurais dû lire "n'était plus obligatoire à partir de la version xxxx"
    ceci fonctionnera
    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\'),Length(UnStringList.strings[UnStringList.Count-2]));
    il faudra corriger de même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function titre(TitreDansListe,Prefixe : String) : String;
    begin
      result:=Copy(TitredansListe,Pos(Prefixe)+1+Length(prefixe),length(titredansliste));
    end;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    @ SergioMaster, merci de prendre de ton temps pour m'orienter.

    Voici une solution bourrin en utilisant un TTimer qui se déclenchera au début de l'extraction depuis mon fichier .bat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Var 
      FileRec : TSearchRec;
      Err : Integer;
    begin
    Err := FindFirst(chappli +'Fin.txt', faAnyFile, FileRec);
    While Err = 0 do
      Begin
     
      Button7Click(Sender);
      Err := FindNext(FileRec);
      End;
    FindClose(FileRec);
    end;
    Dès que le fichier "Titre.txt" est créé, le titre est disponible dans le Tedit et le média player peut s'ouvrir sur ce titre.

    @+,

    cincap

  9. #9
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 609
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour Cincap,

    c'est un deuxième problème, le coup de ton Fin.txt ?

    Sinon dans ton Timer, pourquoi tu ne testes pas directement l'existence de fin.txt ? (FileExists(ChAppli+'Fin.txt')

    (à condition de l'avoir détruit au début du traitement, au cas ou)

    A+
    Charly

  10. #10
    Membre éclairé
    Avatar de Cirec
    Profil pro
    Inscrit en
    octobre 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2010
    Messages : 385
    Points : 894
    Points
    894
    Par défaut
    Bonsoir,

    en ce qui concerne le problème initial ...
    pourquoi pas tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      S: AnsiString;
    begin
        S := 'Audio\El Condor Pasa - Paul Simon & Garfunkel.mp3';
        Caption := ExtractFileName(S);    // Affiche:     El Condor Pasa - Paul Simon & Garfunkel.mp3
    la suite j'ai pas bien saisi la chose


    Cordialement,

    @+

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    Bonjour à toutes et à tous,

    @ Charly910 :

    La commande "Dos" est traitée par ShellExecute et s'affiche dans la fenêtre de l'application avec plusieurs choix pour les formats de compression. (mp3, AAC, mp4....).

    Sinon dans ton Timer, pourquoi tu ne testes pas directement l'existence de fin.txt ? (FileExists(ChAppli+'Fin.txt')
    Mon code dans le timer recherche si "Fin.txt" existe dans le dossier pendant le traitement d'extraction ou de conversion, je vais quand même tester le tien.

    Ce fichier n'est créé qu'a la fin de la conversion du fichier musical avec la commande "FFMPEG" et me donne une indication exploitable que j'utilise pour afficher mon bouton "Play" .

    @ Cirec :

    en ce qui concerne le problème initial ...
    pourquoi pas tout simplement:
    Tout simplement parce que je connais le vrai titre du morceau "audio" qu'à la fin du traitement et cette fin je la connais grâce à la commande dans mon fichier Batch qui crée le fichier "Fin.txt",
    je n'exploite pas le contenu de son fichier qui indique une erreur inexistante (astuce de fichier batch).

    Pour le lecteur Média player par défaut de Windows 10 (Groove musique), il lui faut au moins le titre exact que je récupère dans le fichier "Titre.txt" qui lui se crée au début de la conversion et qui indique tout le traitement et son extension pour lire le fichier.

    C'est vrai que c'est un peu difficile de l'expliquer quand on ne connait pas l'issue finale de cette application.

    @+,

    cincap

  12. #12
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 609
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour,

    sinon, si tu veux attendre la fin de l’exécution du fichier bat tu peux utiliser CreateProcess plutôt que ShellExecute.

    A+
    Charly

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    @ Charly910, ta suggestion fonctionne aussi sur une seule ligne

    @ SergioMaster, ta suggestion ne fonctionne toujours pas :

    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\'),Length(UnStringList.strings[UnStringList.Count-2]));
    @ tous, l'instruction principale de mon projet est :

    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
    29
    30
    31
    32
     
    var
    UnStringList:TStringList;
    begin
     
      //Création du STringList
      UnStringList:=TStringList.Create;
      try
         //Chargement du fichier texte
         UnStringList.LoadFromFile(chappli + 'Titre.txt');
     
     //Fonctionne   
    Ednom.Text:=UnStringList.strings[UnStringList.Count -4];
     
    //Ne fonctionne pas
    //Ednom.Text:=Copy(UnStringList.strings[UnStringList.Count-2],Pos('Audio\')+1+Length('Audio\'),Length(UnStringList.strings[UnStringList.Count-2]));
     
     //Suivant les formats la valeur change
     {aac, m4A = -3 et -28
       mp3 = -4 et -28
       mp4, m4A = -1 et -35 }
     
    //[ffmpeg] Destination: Audio\
      finally
     
         //Destruction du StringList
         UnStringList.Free;
      end;
     
      ednom.text := (RightStr(ednom.text,Length(ednom.text)-28)); // reprends le texte du 1er ednom.text
     
    end;
    Dans le fichier "Titre.txt" se trouve plusieures lignes concernant les étapes de la conversion.

    Pour certains formats la ligne principale qui décrit le nom du fichier final est "[ffmpeg] Destination: Audio\JOHNNY HALLYDAY - Tes tendres années.mp3"
    mais il y a aussi suivant le choix du format [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp4'//mais avec l'apostrophe

    Partant de là, on peut dire que la recherche dans la ligne de en 1 "ffmpeg" et en 2 "'Audio\" ou en 3 "Audio\" serait correcte pour obtenir le nom du fichier et son extension.

    Sinon il faut que je joue sur la valeur de Length (-28) et sur la valeur de [UnStringList.Count -4] voir tableau suivant le format !

    Enfin le fichier "Fin.txt" n'est créé qu'à la fin de tout le processus pour m'indiquer uniquement que le bouton "Play" est disponible pour la lecture.

    @+,

    cincap

  14. #14
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 609
    Points : 2 415
    Points
    2 415
    Par défaut
    Est ce que c'est l'éventuel apostrophe de fin qui te gêne ?

  15. #15
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 609
    Points : 2 415
    Points
    2 415
    Par défaut
    Je pense avoir compris :

    - ce n'est pas toujours le même numéro de ligne selon le format ;
    - ce n'est pas toujours le même position de Audio/ selon le format (là la solution de sergioMaster devrait convenir)
    - il peut y avoir un apostrophe en fin de chaine. On teste, et s'il y en a un, on détruit le dernier caractère.

    Est ce bien cela ?

    A+
    Charly

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    @ Charly910, merci de ta question :

    J'étais en train de t'écrire mais tu as vu juste, le fichier "Titre.txt" change suivant le choix du format dans ma fenêtre Dos :

    - ce n'est pas toujours le même numéro de ligne selon le format ;
    - ce n'est pas toujours la même position de Audio/ selon le format (là la solution de sergioMaster devrait convenir)
    - il peut y avoir un apostrophe en fin de chaine. On teste, et s'il y en a un, on détruit le dernier caractère.
    La solution de SergioMaster ne fonctionne pas sauf erreur de ma part à force de faire des copier/coller.

    @,

    cincap

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    @ tous, j'ai constaté pour tous les formats choisis, se trouve la même dénomination de la ligne dans le fichier "Titre.txt" mais pas à la même place et avec les apostrophes et en tenant compte que le titre peut être plus court ou plus long

    Exemple :

    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp4'
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.aac'
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp3'
    Cela faciliterai la recherche du nom du fichier à lire dans Ednom.text.

    @+,

    cincap

  18. #18
    Membre émérite
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    décembre 2006
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 609
    Points : 2 415
    Points
    2 415
    Par défaut
    Essaye ceci que je n'ai pas testé :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    var
      UnStringList:TStringList;
      i : Integer ;
      Chaine : String ;
      Chaine2 : String ;
      Titre   : String ; 
    Begin
      Chaine2 := '[ffmpeg] Adding metadata to' ;
      Chaine := '' ;
      Titre  := '' ;
      //Création du STringList
      UnStringList:=TStringList.Create;
      Try
         //Chargement du fichier texte
         UnStringList.LoadFromFile(chappli + 'Titre.txt');    
         // Recherche de la ligne titre
         For i := 0 To UnStringList.Count-1 Do
           Begin
             Chaine := LeftStr(UnStringList.strings[i],Length(Chaine2));
             If (Chaine = Chaine2) Then
               Begin
                 // récupération de ce qui est après Audio\
                 Titre := Copy(UnStringList.strings[i],Pos('Audio\')+1+Length('Audio\'),Length(UnStringList.strings[i]));
                 ShowMessage(Titre) ; // Pour test
                 // Suppression de l'éventuel ' de fin
                 If (Titre[Length(Titre)] = '''') Then Delete(Titre, Length(Titre), 2) ;
                 // Sortie de la boucle For
                 Break ;
               End ;
           End ;
         Ednom.Text : =Titre ;
      Finally
         //Destruction du StringList
         UnStringList.Free;
      End;
    End ;
    A+
    Charly

    Sinon envoie un exemple de fichier que l'on puisse tester

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 987
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 987
    Points : 1 185
    Points
    1 185
    Par défaut
    @ tous,

    Voici pour la recherche de l'emplacement de la ligne dans le fichier "Titre.txt" :

    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
     
    var
    Contents:TStringList;
    find:boolean;
    i:integer;
    begin
      find:=false;
      Contents:=TStringList.Create;
      try
        Contents.LoadFromFile(chappli + 'Titre.txt');
        i:=0;
        repeat
         if Pos(edit1.text, Contents[i]) > 0 then
           find:=true
         else
           i:=i+1;
        until ((find) or (i=Contents.Count));
     
        if find then
         ShowMessage(Contents[i]);
     
      finally
        Contents.free;
      end;
    Edit1.text = [ffmpeg] Adding metadata to 'Audio\ //Ligne à rechercher

    Reste plus qu'extraire le nom du fichier.

    @+,

    cincap

  20. #20
    Membre éclairé
    Avatar de Cirec
    Profil pro
    Inscrit en
    octobre 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2010
    Messages : 385
    Points : 894
    Points
    894
    Par défaut
    bon,

    il aurait été plus simple de fournir un code
    et le ou les fichier texte en question !!

    pour le teste il faut 2 TMemo
    1 mmo_Source qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Bonjour
    un peu de texte
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp4'
    entre les
    données
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.aac'
     
    pour vérifier que
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp3'
    tout fonctionne parfaitement
    2 mmo_Dest pour afficher les résultats:

    et le code :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    type
      TCharSet = set of char;
     
    function TrimCharRight(Value: string; Chars: TCharSet): string;
    begin
      if Value <> '' then
      begin
        while (Length(Value) > 0) and (Value[Length(Value)] in Chars) do
          delete(Value, Length(Value), 1);
      end;
      Result := Value;
    end;
     
    function ContainStr(const aStr: string; const aSubStr: string): Boolean;
    begin
      Result := Pos(UpperCase(aSubStr), UpperCase(aStr)) > 0;
    end;
     
    procedure TForm8.FormCreate(Sender: TObject);
    var
      I: Integer;
    begin
          {contenu de mmo_Source}
          {
    Bonjour
    un peu de texte
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp4'
    entre les
    données
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.aac'
     
    pour vérifier que
    [ffmpeg] Adding metadata to 'Audio\JOHNNY HALLYDAY - Tes tendres années.mp3'
    tout fonctionne parfaitement
           }
      for I := 0 to mmo_Source.Lines.Count-1 do
        if ContainStr(mmo_Source.Lines[I], 'audio') then
          mmo_Dest.Lines.Add(ExtractFileName(TrimCharRight(mmo_Source.Lines[I],[''''])));
    end;
    tu remarqueras qu'ExtractFileName est utilisé et fonctionne

    cordialement,

    @+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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, 20h29
  2. Réponses: 2
    Dernier message: 15/02/2007, 23h00
  3. Réponses: 5
    Dernier message: 22/06/2006, 18h19
  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, 15h28
  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, 11h39

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