[ antp.be > Forum ]

[ FAQFAQ - SearchSearch - MemberlistMemberlist - UsergroupsUsergroups - ]

[ RegisterRegister - ProfileProfile - Log in to check your private messagesLog in to check your private messages - Log inLog in ]


Programmation questions
Goto page Previous  1, 2, 3, 4, 5, 6
 
Post new topic   Reply to topic    www.antp.be Forum Index -> Ant Movie Catalog > Scripts
Author Message
VERSEAU44
PostPosted: 2015-09-17 16:49:23    Post subject: Reply with quote
View user's profile Send private message Bonjour,

Comme beaucoup, appréciant l'énorme travail réalisé par Antoine puis Mickaël et les "majors" des scripts (soulsnake, ScorEpioN, Raoul, etc.), je me lance à mon tour.

Après qques jours à m'y frotter, j'ai plusieurs questions :

1°/ comment lancer un script à partir d'un autre script ? La procedure Launch ne semble pas le permettre ...

2°/ Via 1 script, on peut lire/modifier ses options et paramètres, vérifier si ses champs modifiables sont cochés ou non (CanSetField/CanSetExtraField). Est-il possible, toujours via un script, de cocher/décocher ces champs modifiables pour permettre, par exemple, de contrôler plusieurs lancement de scripts (Cf. question 1°/) ?

3°/ Les commandes ANT sont-elles scriptables ou exécutables par ligne de commande batch ? L'objectif serait de lancer un import ou un export sans devoir cocher/décocher manuellement les mêmes paramètres ...

4°/ Quelle est la syntaxe pour lancer une recherche IMdB avec en paramètre d'entrée le titre du film ET le réalisateur ? A défaut, je me plongerai dans BatchCommon7552.pas mais pour un débutant comme moi, il n'est pas simple ...

5°/ J'ai voulu récupérer le code ANSI de chaque caractère d'un champ : la fonction "ord" ne semble pas reconnue et, comme plusieurs autres, je ne trouve pas de doc sur les fonctions disponibles dans le moteur de script.
Plus globalement, existe-t-il une synthèse de TOUTES les fonctions/procédures de la version 2 d'Innerfuse Pascal Script utilisables par ANT ? Je m'explique : celles listées en aide F1, section scripts sont-elles exhaustives ? Je doute en lisant Antoine qui indique en bas du POST http://forum.antp.be/phpbb2/viewtopic.php?p=19570, "les scripts sont [...] en "Innerfuse Pascal Script" (Pascal/Delphi simplifié : seulement quelques fonctions sont disponibles, et des tas d'éléments du langage manquent)."
En téléchargeant le code source AMC, j'ai trouvé quelques infos complémentaires dans le répertoire \help\French mais pas de liste des fonctions/procédures (hormis celle affichée via F1)
Par exemple, le fichier ifps\readme.txt indique : "Documentation can be found in a seperate archive on my website." [http://carlo-kok.com]. Mais après plusieurs recherches ... rien.

MERCI pour votre aide
antp
Site Admin
PostPosted: 2015-09-18 17:04:57    Post subject: Reply with quote
View user's profile Send private message Visit poster's website 1. pas possible a priori

2. non

3. je ne pense pas, mais avec des outils externes on peut peut-être y arriver (AutoIt peut-être, comme mentionné sur l'autre thread)

4. je ne comprends pas la question grin Si la question porte sur l'URL à utiliser pour la requête, je ne suis pas sûr que le site le prévoie

5. il me semble que c'est faisable mais je ne sais plus comment ; si soulsnake passe par là il aura peut-être une idée
Pour la liste des fonctions dispo, je n'en sais trop rien, je ne sais pas s'il y a une liste quelque part
soulsnake
PostPosted: 2015-09-18 23:24:44    Post subject: Reply with quote
View user's profile Send private message Send e-mail 5. Si tu as téléchargé le code source, tu trouveras la doc de Innerfuse Pascal Script dans le dossier ifps/doc/index.html où les fonctions de base implémentées sont listées. Les fonctions avancées sont toutes décrites dans l'aide d'AMC. Les fonctions Ord(C : Char) : Byte et Chr(B : Byte) : Char existent belles et biens.

Soulsnake.
mosk79
PostPosted: 2015-09-22 06:39:29    Post subject: Reply with quote
View user's profile Send private message I need help to modify IAFD script.
Now actress and actors are all mixed up, in alphabetical order (before you had actresses in one table, actors in another)

I need a code, that search for an specific condition (gender=f) between an html table (where actors names are)

So, the code must do this:

search inside <actors_table>
the actress name begin with (html_code), and end with (html_code)
do while gender=f is in the html code.

The result has to be all actresses names separated by ,

Someone know how to do that?
VERSEAU44
PostPosted: 2015-09-23 09:47:09    Post subject: Reply with quote
View user's profile Send private message Rajout d'une question (retour sur les 5 premières à la suite) :
6/ Peut-on afficher une fenêtre SANS boutons, ne suspendant pas l'execution du script ? Quand j'ai plusieurs lourds fichiers à copier, j'aimerai savoir où j'en suis dans la progression de cette copie (sans devoir acquitter un "OK" à l'affichage d'un ShowMessage après chacun d'eux) ...

1/ Dommage de ne pouvoir enchainer l'exe de plusieurs scripts sad Voici la réponse de Carlo KOK (développeur d'Innerfuse Pascal Script V2) : "ifps2 has nothing built in to do that. It would be up to to the host to provide that functionality".

2/ Je croyais que C:\ProgramData\Ant Movie Catalog\script.ini conservait justement les champs modifiables cochés ou non (ce qui aurait permit de les modifier par script) mais il ne semble pas. Pourtant, leur état est bien conservé d'un script à l'autre (SAUF pour les champs CUSTOM) ...

3/ Oui, AutoIt devrait pouvoir le faire ...

4/ Oui, c'est bien de l'URL à passer en requête dont je parlais grin kind

5/ Effectivement, dans ifspas.html, il est fait référence à la fonction ord() (non documentée mais, bon, on peut trouver ailleurs). Désolé oh well
antp
Site Admin
PostPosted: 2015-09-24 19:29:03    Post subject: Reply with quote
View user's profile Send private message Visit poster's website 6. Y a peut-être moyen de construire une Form via les éléments intégrés de base dans IFPS2 mais je ne me suis jamais penché là dessus

2. C'est en effet stocké là (clé = Fields.Excluded) ; c'est vrai qu'un script pourrait aller attaquer ce fichier mais ce n'est pas très propre et de toute façon de mémoire le fichier n'est lu qu'à l'ouverture de la fenêtre des scripts et écrit à la fermeture, du coup les modifs faites entre les deux (le seul moment où le script peut le faire) seraient perdues.
Et puis l'intérêt de ces options est justement de contrôler le script plutôt que d'être contrôlées par le script...
EricTraveling
PostPosted: 2016-04-08 14:44:11    Post subject: Extract string Reply with quote
View user's profile Send private message Cela fait bien longtemps que je n ai plus touché du pascal (genre TB7 il y a 15-20 ans), je suis tout rouillé pour les trucs de base.

Je cherche à calculer le "compression ratio" ou "Bits/(Pixel*Frame)" et l'enregistrer dans un champ supplémentaire sous AMC 4.2
ratio = bitrate in bytes / (width * height * framerate).

Parfois, ce ratio est directement dispo sous MediaInfo, mais pas toujours.

On peut récupérer directement le bitrate et le framerate dans AMC. Mais le width * height doivent être extrait du champ resolution il me semble.

Quelle est la façon la plus propre ds AMC pour extraire ces valeurs ?
Ds bcp d autres langages, on a une fonction split ou explode à dispo.
Est ce que AMC supporte le Delphi RTL, qui contient SplitString ds System.StrUtils ?
Sinon, avec une fonction définie ds les StringUtils de AMC peut etre?
antp
Site Admin
PostPosted: 2016-04-08 21:51:24    Post subject: Reply with quote
View user's profile Send private message Visit poster's website Il y a un support pour les regex qui a été rajouté par soulsnake mais je n'ai jamais compris comment l'utiliser dans les scripts d'AMC grin
Dans StringUtils1.pas il y a quelques fonctions que j'utilise souvent dans les scripts qui permettent de manipuler des chaînes en récupérant des morceaux avant/après des éléments fixes, si ça peut aider...
soulsnake
PostPosted: 2016-04-09 05:43:43    Post subject: Reply with quote
View user's profile Send private message Send e-mail L'utilisation des RegExpr dans les scripts peut paraître un peu compliqué la première fois mais une fois compris c'est très simple à utiliser et surtout très puissant.
Il y a effectivement beaucoup de fonctions de disponibles, ce qui peut sembler compliqué, mais c'est pour fournir toute la puissance des RegExpr.
Toutes les fonctions sont détaillées dans l'aide d'AMC mais la plupart du temps, les fonctions suivantes suffisent :
Code:
function RegExprSet(ExprStr: string): Boolean;

function RegExprExec(InputStr: string): Boolean;

function RegExprMatch(SubExprIdx: Integer): string;
ou
function RegExprSubstitute(TemplateStr: string): string;



Voici un exemple simple détaillé pour récupérer la largeur et la hauteur depuis le champ résolution en utilisant les RegExpr :

Code:
program ParseResolutionFieldUsingRegExpr;
var
  ExprStr : string;
  InputStr : string;
  W, H : Integer;
begin
  // Init variables
  ExprStr := '([0-9]+)x([0-9]+)'; // e.g. 640x352
  InputStr := GetField(fieldResolution);
  W := 0;
  H := 0;
 
  // Set RegExpr
  RegExprSet(ExprStr);
 
  // Exec RegExpr on InputStr
  if RegExprExec(InputStr) then
  begin
    // Get SubExpr 1 with RegExprMatch
    W := StrToInt(RegExprMatch(1), 0);
    // or use RegExprSubstitute
    // W := StrToInt(RegExprSubstitute('$1'), 0);
   
    // Get SubExpr 2 with RegExprMatch
    H := StrToInt(RegExprMatch(2), 0);
    // or use RegExprSubstitute
    // H := StrToInt(RegExprSubstitute('$2'), 0);
  end;
 
  ShowMessage(IntToStr(W) + ' ' + IntToStr(H));
end.



Soulsnake.
antp
Site Admin
PostPosted: 2016-04-09 10:23:01    Post subject: Reply with quote
View user's profile Send private message Visit poster's website Pour un cas comme ici, la solution avec mes fonctions est sans doute plus concise :
Code:
W := StrToInt(TextBefore(InputStr, 'x', ''), 0);
H := StrToInt(TextAfter(InputStr, 'x'), 0);


Mais en effet les regex c'est très puissant, je ne sais pas ce que j'avais mal fait quand j'avais tenté de les utiliser, j'essaierai de retrouver cet exemple-ci la prochaine fois que j'en ai besoin smile
EricTraveling
PostPosted: 2016-04-09 19:45:30    Post subject: Reply with quote
View user's profile Send private message Merci. Regex pour un truc si simple, c est un peu le rouleau compresseur pour écraser une mouche... J en reste aux fonctions d'Antoine, même si je ne trouve pas cela très élégant. D'ailleurs, comparé à du C#, Java ou Python par ex, je ne suis pas fan du code Pascal, mais bon...

Mon script fonctionne presque.
Mais j ai un soucis avec la fonction StrToFloat. Par défaut, elle ne fonctionne sur mon système (Windows 10 US, locale FR) qu'avec un point comme séparateur décimal et plante avec une virgule alors que la virgule est utilisée ds mes valeurs (framerate 23,976)
Du coup, j essaie de spécifier cela ds un TFormatSettings mais e type ne semble pas être reconnu par AMC (erreur à la ligne 8).
D ailleurs, la fonction GetLocaleFormatSettings ne semble exister qu'à partir de Delphi7.
Une idée?

Code:

function StrToFloat2(const Value: String): real;
var
  myFormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(GetThreadLocale, myFormatSettings);
  myFormatSettings.DecimalSeparator := ',';
  Result := StrToFloat(Value, myFormatSettings);
end;
 
//------------------------------------------------------------------------------
// CALCUL CompressionRatio
//------------------------------------------------------------------------------
procedure compressionRatio();
var
  ratio, framerate : real;
  width, height, bitrate, selectedField : Integer;
  res, frameStr : String;
begin
   res := GetField(fieldResolution);
   width := StrToInt(TextBefore(res, 'x', ''), 0);
   height := StrToInt(TextAfter(res, 'x'), 0);      
   bitrate := StrToInt(GetField(fieldVideoBitrate), 0);   
   frameStr := GetField(fieldFramerate);
   framerate := StrToFloat2(frameStr);
   
end;


EDIT: reduction du code au plus élémentaire


Last edited by EricTraveling on 2016-04-10 12:43:21; edited 2 times in total
antp
Site Admin
PostPosted: 2016-04-10 00:43:21    Post subject: Reply with quote
View user's profile Send private message Visit poster's website
EricTraveling wrote:
D'ailleurs, comparé à du C#, Java ou Python par ex, je ne suis pas fan du code Pascal, mais bon...

C# est pourtant fort proche de Delphi pour pas mal de choses, ça a été conçu en partie par un ancien de Delphi (et en tant qu'ex-programmeur Delphi reconverti au C#, ça a facilité le passage de l'un à l'autre).
Bon ça reste avec une syntaxe plus proche du C++ alors qu'en Pascal avec les begin/end on a une syntaxe qui paraît plus lourde.

Ici on est dans un moteur de scripts très basique, inspiré de Pascal/Delphi, donc pas mal de trucs n'existent pas ou ont dû être adaptés.
Pour le problème des nombres flottants, un coup de StringReplace sera plus simple...

Result := StrToFloat(StringReplace(Value, ',', '.'));
EricTraveling
PostPosted: 2016-04-10 12:52:44    Post subject: Reply with quote
View user's profile Send private message
antp wrote:
EricTraveling wrote:
D'ailleurs, comparé à du C#, Java ou Python par ex, je ne suis pas fan du code Pascal, mais bon...

C# est pourtant fort proche de Delphi pour pas mal de choses, ça a été conçu en partie par un ancien de Delphi (et en tant qu'ex-programmeur Delphi reconverti au C#, ça a facilité le passage de l'un à l'autre).
Bon ça reste avec une syntaxe plus proche du C++ alors qu'en Pascal avec les begin/end on a une syntaxe qui paraît plus lourde.

Ici on est dans un moteur de scripts très basique, inspiré de Pascal/Delphi, donc pas mal de trucs n'existent pas ou ont dû être adaptés.
Pour le problème des nombres flottants, un coup de StringReplace sera plus simple...

Result := StrToFloat(StringReplace(Value, ',', '.'));


Oui je sais bien que c est Hejlsberg qui a crée TurboPascal, Delphi et C#.
C est justement les begin/end que je trouve trop lourd.
Tient d ailleurs, en moteur de script équivalent à celui d'AMC, j avais utilisé en dotNet le language 'boo' il y a 8 ans, plus proche du python
( https://en.wikipedia.org/wiki/Boo_%28programming_language%29 )
Il doit y avoir plein de solutions plus modernes maintenant...

Bon, tu as raison, un simple stringReplace suffit très bien ici.

Du coup, mon script complet et fonctionnel:

Code:
program CompressionRatio;
uses 
  StringUtils1, FieldsUtils;

procedure compressionRatio();
var
  ratio, framerate : real;
  width, height, bitrate, selectedField : Integer;
  res : String;
begin
   res := GetField(fieldResolution);
   width := StrToInt(TextBefore(res, 'x', ''), 0);
   height := StrToInt(TextAfter(res, 'x'), 0);      
   bitrate := StrToInt(GetField(fieldVideoBitrate), 0);   
   framerate := StrToFloat(StringReplace(GetField(fieldFramerate), ',', '.'));   
   
   if (width > 0) and (height > 0) and (bitrate > 100) and (framerate > 10) then
    begin
      ratio := (bitrate * 1000) / (width * height * framerate);
      selectedField := GetFieldOrCustomFieldIdx('CompressionRatio');
      if (CanSetFieldOrCustomField(selectedField)) then
        SetFieldOrCustomField(selectedField, FloatToStr(ratio))
    end;
end;

begin 
  compressionRatio();
end.


Cela tient plutôt de la curiosité. Sur ma collection de film, en appliquant le calcul sur tous, j obtient quasi une gaussienne centrée sur 0,21. Cela correspond à l indice recommandé pour les DVD Rip en Xvid, qui forment encore les 3/4 de la collection qui date des années 2002-2005 ...
jeanfran59
PostPosted: 2017-07-01 18:54:17    Post subject: Reply with quote
View user's profile Send private message Bonjour,

j'ai des questions simples (enfin pas pour moi).
Quel est le nom de champs d'un extra ? est ce que c'est juste le nom donné ou il y a un nom devant ?
Comment attribuer une valeur a un extra ? Est ce qu'on utilise SetExtraField ?

Merci.
antp
Site Admin
PostPosted: 2017-07-01 19:12:49    Post subject: Reply with quote
View user's profile Send private message Visit poster's website Bonjour,
C'est soulsnake qui avait rajouté tout ça donc je ne sais pas exactement comment ça marche, mais tu as regardé la liste des fonctions dans le fichier d'aide ? Ça peut déjà donner une piste.
VERSEAU44
PostPosted: 2017-07-14 12:05:03    Post subject: Vider un champs Reply with quote
View user's profile Send private message Bonjour le forum,

Je n'arrive pas à mettre à blanc le champ fieldMediaType (le vider), ni avec la fonction SetField(fieldMediaType, ''), ni avec le script "Update Fields" de ScorEpioN, Dedej, SoulSnake ...

Pourtant, le champ est bien modifiable !

Pour l'instant, je fais un SetField(fieldMediaType, ' '), avec un espace : mais ce n'est pas satisfaisant ...

MERCI pour votre aide !
antp
Site Admin
PostPosted: 2017-07-14 12:31:06    Post subject: Reply with quote
View user's profile Send private message Visit poster's website Bonjour,
En haut à droite de la fenêtre de scripts il y a une option "Permettre de vider les champs" ; il me semble que par défaut elle est désactivée, pour le cas où on combine plusieurs scripts ne trouvant pas tous toutes les infos.
VERSEAU44
PostPosted: 2017-07-17 12:25:17    Post subject: Reply with quote
View user's profile Send private message SUPER Antoine : c'est bien LA solution
J'avais complètement zappé cette option ;o)
MERCI encore et bonne journée ...
Display posts from previous:   
View previous topic :: View next topic  
Post new topic   Reply to topic    www.antp.be Forum Index -> Ant Movie Catalog > Scripts All times are GMT + 1 Hour
Goto page Previous  1, 2, 3, 4, 5, 6
Page 6 of 6

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
Template made by antp