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 :

Rechercher un titre dans un fichier texte à partir d'un indice sous D6 et Windows 10.


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut Rechercher un titre dans un fichier texte à partir d'un indice sous D6 et Windows 10.
    Bonjour à toutes et à tous,

    Depuis un fichier texte dont le nom change tout le temps sauf l'indice qui est toujours ("title" j'aimerai récupérer dans un Tedit avec cet exemple "Jose Feliciano che sara" sans les guillemets

    Exemple :

    "season_number": null, "title": "Jose Feliciano che sara",
    J'utilise une variable TStringList qui me charge mon fichier dans un TMemo mais je ne vois pas comment récupérer ce titre.

    Merci si quelqu'un avait une piste.

    @+,

    cincap

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Si tu as toujours la même structure dans une chaîne en entrée, tu peux tenter un code de ce style (non 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
    function ExtraitTitre(aFrom: string): string;
    const
      Motif = '"title": "';
      Long = Length(Motif);
    var
      S: string;
      i, Len: integer;
    begin
      Result := '';
      Len := Length(aFrom);
      i := Pos(Motif, aFrom);
      if i = 0 then
        Exit
      else
        S := Copy(aFrom, i+Long+1, Len-i-Long+1;
      i := Pos('"', S);
      if i = 0 then
        Exit
      else
        SetLength(S, i-1);
      Result := S;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Salut

    Ou une solution similaire..

    La borne est ce que tu appelles : Indice ( passé en paramètre).

    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
    Function ExtraitTitre(borne:string):string;
    var Stl :TstringList;
        Line:string;
        i,p :integer;
    begin
         Stl:=TstringList.create;
         Stl.LoadFromFile('C:\Users\Public\Documents\Embarcadero\title.txt');
     
         for i:=0 to Stl.Count-1 do
         begin
             line:=Stl[i];
             P:=AnsiPos(Borne,line);
             if P<>0 then
             begin
                 delete(line,1,P+length(Borne)-1);
                 delete(line,length(line)-1,length(line));
                 result:=line;
                 exit;
             end;
         end;
    end;
     
     
    procedure TForm7.Button1Click(Sender: TObject);
    begin
       edit2.Text:=ExtraitTitre('"Title":"');
    end;
    a bientôt
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Cela ressemble quand même furieusement à un ensemble de couple nom=valeur qu'une TStringList sait gérer.
    Maintenant, avec D6 , frustrant je ne peux tester
    peut-on changer le signe (NameValueSeparator) '=' par ':' sous D7 il semblerait que oui
    une fois la liste chargée il suffirait alors d'utiliser titre:=stringlist.value['title']je pense à quelque chose comme ça
    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
     
     ligne:='"season":null,"title":"Julio noucera que sera"';
     
    function gettitre(ligne : string) : String;
     var Sl : TStringList;
        texte : String;
        i : integer;
    begin
    Sl:=TStringList.Create;
    try
    // sl.QuoteChar:='"';
     sl.StrictDelimiter:=true;
     sl.NameValueSeparator:=':';
     sl.DelimitedText:=StringReplace(ligne,'"','',[rfReplaceAll]);
     result:=sl.Values['title'];
    finally
      SL.Free;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ petitcoucou31, merci de ta suggestion, j'ai testé et pas d'erreur mais cela ne fonctionne pas.

    @ tourlourou, merci aussi de ta suggestion, à part un oubli de la parenthèse de fermeture, cela ne fonctionne pas non plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     else
        S := Copy(aFrom, i+Long+1, Len-i-Long+1);
    @ SergioMaster, merci de ta suggestion, je pense que c'est une approche, mais comment tester ?

    A toutes fins, un exemple du contenu de ce fichier et c'est bien après l'indice "title": que j'aimerai récupérer le titre.

    {"artist": "Alain Morisod & Sweet People", "filesize": null, "extractor": "youtube", "vcodec": "none", "height": null, "_filename": "Audio\\Halleluia.webm", "duration": 235, "average_rating": 4.8823528, "dislike_count": 1, "is_live": null, "webpage_url_basename": "watch", "format_note": "DASH audio", "channel_url": "http://www.youtube.com/channel/UCuix9xiVI87oi4WtZTSkUCg", "track": "Alleluia", "thumbnail": "https://i.ytimg.com/vi/VaDjAsQG6Ao/maxresdefault.jpg", "language": null, "tbr": 140.55, "title": "Alain Morisod & Sweet People = Alleluia", "abr": 160, "series": null, "release_year": null, "view_count": 2956, "fps": null, "album": "Super Sympa", "uploader_id": "UCuix9xiVI87oi4WtZTSkUCg", "container": "webm_dash", "protocol": "http_dash_segments", "season_number": null, "annotations": null, "age_limit": 0, "format": "251 - audio only (DASH audio)", "fragments": [{"path": "range/0-258"}, {"duration": 10.001, "path": "range/664-174453"}, {"duration": 10.0, "path":
    Je continue aussi de chercher.

    @+,

    cincap

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    A peine remis en forme :
    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
    procedure TForm1.Button6Click(Sender: TObject);
    const
      Chaine1 = '{"artist": "Alain Morisod & Sweet People", "filesize": null, "extractor": "youtube", "vcodec": "none", "height": null, "_filename": "Audio\\Halleluia.webm", "duration": 235, "average_rating": 4.8823528, ';
      Chaine2 = '"dislike_count": 1, "is_live": null, "webpage_url_basename": "watch", "format_note": "DASH audio", "channel_url": "http://www.youtube.com/channel/UCuix9xiVI87oi4WtZTSkUCg", "track": "Alleluia", ';
      Chaine3 = '"thumbnail": "https://i.ytimg.com/vi/VaDjAsQG6Ao/maxresdefault.jpg", "language": null, "tbr": 140.55, "title": "Alain Morisod & Sweet People = Alleluia", "abr": 160, "series": null, "release_year": null, ';
      Chaine4 = '"view_count": 2956, "fps": null, "album": "Super Sympa", "uploader_id": "UCuix9xiVI87oi4WtZTSkUCg", "container": "webm_dash", "protocol": "http_dash_segments", "season_number": null, "annotations": null, ';
      Chaine5 = '"age_limit": 0, "format": "251 - audio only (DASH audio)", "fragments": [{"path": "range/0-258"}, {"duration": 10.001, "path": "range/664-174453"}, {"duration": 10.0, "path": ';
      Motif   = '"title": "';
    function ExtraitTitre(aPattern, aFrom: string): string;
     var
      S: string;
      i, Len, LongP: integer;
     begin
      Result := '';
      Len := Length(aFrom);
      LongP := Length(aPattern);
      i := Pos(Motif, aFrom);
      if i = 0 then
        Exit
      else
        S := Copy(aFrom, i+LongP+1, Len-i-LongP+1);
      i := Pos('"', S);
      if i = 0 then
        Exit
      else
        SetLength(S, i-1);
      Result := S;
     end;
    var
      TestString: string;
    begin
      TestString := Chaine1 + Chaine2 + Chaine3 + Chaine4 + Chaine5;
      ShowMessage(ExtraitTitre(Motif, TestString));
    end;
    affiche :
    [Window Title]
    Project1

    [Content]
    lain Morisod & Sweet People = Alleluia

    [OK]
    J'avais cru comprendre que c'était la valeur cherchée ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Re,

    cet extrait ressemble furieusement à du JSON, ce que bien évidemment D6 ne connaissais pas
    Pour avoir lu son article en correction technique, je sais que popo propose quelque chose qui pourrait fonctionner, mais comme ce n'est pas encore publié, le contacter par MP.

    Il y a très certainement aussi des composants tiers, je n'ai pas cherché énormément pour trouver des possibilités soit sur github soit sur sourceforge de là à dire que ce sera d6 compatible ....

    Autre possibilité, les expressions régulières mais idem problème de compatibilité D6.

    Donner le fichier texte complet dès le début aurait quand même été mieux pour fournir la bonne piste : c'est du JSON.
    Même ce dernier extrait, malgré ma connaissance partielle de JSON, ne me semble pas complet
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    bonjour

    Mon code marche sous Delphi Rio,

    Par contre dans mon appel à la fonction.. j'ai mis une majuscule a "Title ..., qui n'existe pas dans ton fichier texte. D’où le non fonctionnement.
    A corriger !

    A plus
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ petitcoucou31,

    Par contre dans mon appel à la fonction.. j'ai mis une majuscule a "Title ..., qui n'existe pas dans ton fichier texte. D’où le non fonctionnement.
    A corriger !
    je viens à nouveau de tester en modifiant la majuscule et rien.

    J'avais juste modifié "Edit2" par le nom de mon Tedit "Ednom" pour afficher le résultat.

    @ SergioMaster, en effet j'ai la possibilité de créer un fichier .json ou un fichier .txt mais alors c'est une autre base pour l'indication du titre :

    [ffmpeg] Adding metadata to 'Audio\Alleluia_Alain_Morisod_Sweet_People.mp3'
    @ tourlourou, encore merci je vais tester.

    Cordialement,

    @+,

    cincap

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    Avec ceci, j'obtiens un résultat qui me convient je continue à tester suivant le résultat dans le fichier "Titre.txt" et suivant le fichier musical.

    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
     
    var
    UnStringList:TStringList;
    begin
     
      //Création du STringList
      UnStringList:=TStringList.Create;
      try
         //Chargement du fichier texte
         UnStringList.LoadFromFile(chappli + 'Titre.txt');
     
         //Contrôle
         Memo1.Lines.LoadFromFile(chappli + 'Titre.txt');
     
         Ednom.Text:=UnStringList.strings[UnStringList.Count -4];
     
      finally
     
         //Destruction du StringList
         UnStringList.Free;
      end;
      //ShowMessage(RightStr(ednom.text,Length(ednom.text)-28));
      Ednom.text := (RightStr(ednom.text,Length(ednom.text)-28));
    @+,

    cincap

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    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 : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour Cincap,

    ton dernier code n'est pas général. Il suppose que le titre à une longueur de 28 caractères. Utilise plutôt ceux de PetitCoucou31 ou Tourlourou qui fonctionnent très bien.

    Il faut utiliser la fonction Pos pour localiser "title :

    A+
    Charly

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ SergioMaster, en effet j'ai la possibilité de créer un fichier .json ou un fichier .txt mais alors c'est une autre base pour l'indication du titre :
    On ne se comprend, a priori, pas !
    Je parle du fait que le fichier à analyser semble être en format JSON et tu me réponds que tu peux créer des fichiers JSON le rapport ?

    Je suis d'accord, s'il n'y a qu'à extraire le titre un pos de la chaine "title": permet de se déplacer directement dessus.
    La valeur obtenue+la longueur de la chaine recherchée+1 donne le début du titre de la chanson
    un remplissage d'une chaine caractère par caractère jusqu'à ce qu'un nouvel guillemet soit obtenu (je viens de découvrir que guillemet était masculin) donnera le titre entier, ce que la fonction de toulourou proposait
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    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 : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour Cincap,

    voici ton code comportant avec la fonction de Tourlourou que j'ai testé avec succès sous D7 (et Win 10 !!)

    (avec une simple correction d'indice en ligne 19)

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    { ========================================================================== }
    procedure TForm1.Button2Click(Sender: TObject);
    Const
      Motif = '"title": "';
    { -------------------------------------------------------- }
    function ExtraitTitre(aPattern, aFrom: string): string;
    // Extraction de aPattern dans aFrom
     var
      S: string;
      i, Len, LongP: integer;
     begin
      Result := '';
      Len := Length(aFrom);
      LongP := Length(aPattern);
      i := Pos(Motif, aFrom);
      if i = 0 then
        Exit
      else
        S := Copy(aFrom, i+LongP, Len-i-LongP+1);
      i := Pos('"', S);
      if i = 0 then
        Exit
      else
        SetLength(S, i-1);
      Result := S;
     end;
    { -------------------------------------------------------- }
    var
      UnStringList:TStringList;
      i : Integer ;          // ligne courante du fichier Titre.txt
      chappli  : String ;    // Répertoire de l'application
      Index : Integer ;      // Numéro de la ligne comportant Motif
    begin
      chappli  := IncludeTrailingBackslash(ExtractFilePath(Application.ExeName)) ;
      //Création du STringList
      UnStringList:=TStringList.Create;
      try
         //Contrôle
         Memo1.Lines.LoadFromFile(chappli + 'Titre.txt');
         //Chargement du fichier texte
         UnStringList.LoadFromFile(chappli + 'Titre.txt');
         Index := -1 ;
         For i := 0 To Memo1.Lines.Count - 1 Do
         //  au cas ou Titre.txt comporte plusieurs lignes
           Begin
             If Pos(Motif, UnStringList.strings[i]) >0 Then
               Begin
                 Index := i ;
                 Break ;
               End ;
           End ;
         If (Index >=0) Then
           Ednom.Text:= ExtraitTitre(Motif, UnStringList.strings[Index]);
      finally
         //Destruction du StringList
         UnStringList.Free;
      end;
    end;
    { ========================================================================== }
    A+
    Charly

    PS : @SergioMaster : chez moi on dit un nouveau guillemet

  14. #14
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    @SergioMaster : chez moi on dit un nouveau guillemet
    je n'ai pas appliqué le genre jusqu'au bout
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    salut
    si je comprends bien "title" revient qu'une seule fois ?
    as tu réussi avec ce qui t'a été donné ?

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    Excusez du retard mais beaucoup de déplacement vers l'hôpital en ce moment .

    Merci aux membres qui ont continué à alimenter ce topic.

    @ Charly910

    ton dernier code n'est pas général. Il suppose que le titre à une longueur de 28 caractères. Utilise plutôt ceux de PetitCoucou31 ou Tourlourou qui fonctionnent très bien.
    Tu as tout à fait raison, je m'en suis rendu compte avec d'autres tests et je vais tester ce que tu me suggères.

    @ SergioMaster,

    Je parle du fait que le fichier à analyser semble être en format JSON et tu me réponds que tu peux créer des fichiers JSON le rapport ?
    Tu as raison, dans mon exemple c'est bien un fichier .Json et c'est pour cela que j'écrivais que j'avais le choix dans ma commande de créer soit un fichier .txt ou un fichier .json en ajoutant ceci "--write-info-json" dans cette commande Dos.

    Merci à tous, je vais tester et vous dit quoi.

    @+,

    cincap

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly 910 Voila j'ai testé dans tous les sens et ta solution fonctionne correctement quand il s'agit d'un fichier ayant l'extension .json car avec ce fichier dans le code il y a toujours le repère "title".

    Seul inconvénient avec ce fichier c'est que je ne connais pas son nom à l'avance et donc je ne saurai pas l'indiquer dans ma procédure.

    Par contre le fichier "Titre.txt" c'est moi qui choisis son nom et qui le renseigne dans la commande mais dans le code final le repère "title" ne s'y trouve pas.

    Mais la ligne qui renseigne le titre est "[ffmpeg] Destination: Audio\" Titre

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aCmdLine := PChar(cmdSwitch + eddos.text + '"'+Edtitre.Text+'"' + '.%(ext)s ' + '"'+edurl.Text+'"'+ '>Titre.txt') ;
    Pour le fichier .json je dois l'indiquer dans la commande du TEdit "eddos.text"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    -x --extract-audio --audio-format mp3 --write-info-json --output Audio/
    Et dans ce fichier le repère "title" s'y trouve.

    Et la solution de Charly910 est plus que extra.

    Je vais voir la modif avec le fichier "Titre.txt" en utilisant la solution de Charly910.

    @+,

    cincap

  18. #18
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    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 : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    je n'ai fait que reprendre la fonction de Tourlourou !

    Je suis content que cela fonctionne,, même si je n'ai pas tout compris.

    A+
    Charly

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly910, tu as raison merci aussi à Tourlourou bien entendu.

    1) je charge un lien d'une vidéo YouTube ("https://www.youtube.com/watch?v=rMxeXTnrRV0").

    2) je récupère le fichier audio avec FFMPEG et YouTube-dl //Ce qui est autorisé quand c'est pour une utilisation personnelle et non commerciale (Loi)

    Si j'utilise la création d'un fichier .json il prend le nom du fichier audio qui est dans la vidéo (que je ne connais pas puisqu'il est crypté) donc je ne sait pas le placer dans le TMemo pour le lire.

    A ce stade la solution de Tourlourou remaniée par Charly910 est super si je la teste avec un fichier .json qui existe déjà.

    3) Si je crée moi même un fichier text dans ma commande d'extraction, je peux lui donner un nom quelconque soit Titre.txt et dans ce fichier lors du déroulement du code il existe toujours
    la chaîne "[ffmpeg] Destination: Audio\"puis le nom de l'audio.mp3 peu importe la ligne ou elle se trouve.

    C'est pour cela que la solution avec le chiffre 28 fonctionne car ce chiffre représente le nombre de caractère avant le contre slash et sera toujours le même indépendamment du nombre de caractères que contient le titre de la vidéo qui est le même pour l'audio.

    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
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
    Contents:TStringList;
    find:boolean;
    i:integer;
     
    chaine : string;
    begin
      Memo1.Lines.LoadFromFile(chappli + 'Titre.txt');
     
     Chaine := '[ffmpeg] Destination: Audio\' ;
     
      find:=false;
     
      Contents:=TStringList.Create;
      try
        Contents.LoadFromFile(chappli + 'Titre.txt');
        i:=0;
        repeat
     
        If (Pos(Chaine, Contents[i]) > 0) then
           find:=true
     
         else
           i:=i+1;
        until ((find) or (i=Contents.Count));
     
        if find then
     
        ednom.text := (RightStr(Contents[i],Length(Contents[i])-28));
     
      finally
        Contents.free;
         end;
     
    end;
    La procédure du bouton3 est actionnée après le processus de l'extraction.

    Voila voilou,

    @+,

    cincap

  20. #20
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par cincap Voir le message
    Excusez du retard mais beaucoup de déplacement vers l'hôpital en ce moment .
    Je compatis, ce n'est pas vraiment le moment d'aller faire un tour dans ces établissements sauf cas de force majeur

    @ SergioMaster,
    Tu as raison, dans mon exemple c'est bien un fichier .Json
    Il me manquait juste la compréhension de l'obtention de ce fichier, cette histoire de commande DOS m'échappait du moins dans cette discussion !

    Tu n'as donc pas de composant pour lire des fichiers JSON (ce que des versions modernes ont) dommage. Du coup le format JSON est peut-être moins attractif que le format .text tout bête (moins de balises spécifiques à JSON )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. [PHP 5.0] Rechercher un script dans un fichier texte
    Par schats dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2009, 21h24
  2. Recherche de prix dans un fichier texte
    Par idoclub dans le forum Pascal
    Réponses: 6
    Dernier message: 18/03/2009, 17h03
  3. Réponses: 13
    Dernier message: 23/09/2008, 15h51
  4. Recherche de palindromes dans un fichier texte
    Par dyala dans le forum Pascal
    Réponses: 4
    Dernier message: 25/05/2007, 19h10
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

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