Page 1 of 1
Ignorer reconnaissance majuscule/minuscule dans les scripts
Posted: 2009-01-17 12:21:40
by tekmars
Bonjour @ tous,
J’utilise ce script pour "nettoyer" le titre traduit avant d’importer la fiche du film :
Code: Select all
program NewScript;
var
s: string;
begin
s := GetField(fieldTranslatedTitle);
s := StringReplace(s, 'RIP', '');
SetField(fieldTranslatedTitle, s);
end.
Le script ne reconnaît que les titres contenant le mot "
RIP", par contre il ne reconnaît pas les autres variantes :
Rip /
RiP /
rip /
rIp /
riP …
Merci de m’aider pour contourner ce problème.
tekmars
Posted: 2009-01-17 14:47:27
by bad4u
Code: Select all
program DeleteString;
var
s: string;
StartPos: integer;
begin
s := GetField(fieldTranslatedTitle);
StartPos := pos('rip', AnsiLowerCase(s));
while StartPos > 0 do
begin
s := copy(s, 0, StartPos - 1) + copy(s, StartPos + 3, Length(s));
StartPos := pos('rip', AnsiLowerCase(s));
end;
SetField(fieldTranslatedTitle, s);
end.
Be careful, as the script will delete ALL "rip" from the title and so affect words like "Ripper" or "Strip", too (like your routine does). So it might be better/safer, e.g. if rip is always found on the beginning of the line, to compare the first 4 characters explicitly ('rip' and a space) and then delete these ones only. At least you might want to use 'rip ' (with a space) instead of 'rip'.
Posted: 2009-01-17 16:12:50
by tekmars
Merci bad4u pour ta réponse, effectivement c'est une solution.
Par contre si je veux l'appliquer sur une série de mots (french, dvd, divx, ripped, XviD...) ça va être galère pour faire le script et le faire évoluer (ajout de mots clés).
En fait, il n'existe pas une commande qui empêche juste la distinction entre majuscule/minuscule ?
----------
Thank you Bad4u for your reply, it is actually a solution. But if I want to implement a series of words (french, dvd, divx, ripped, XviD ...) it will be hard to do the script and to change (adding keywords).
There is not something that just prevents the distinction between uppercase / lowercase?
-----------
Posted: 2009-01-17 20:50:13
by antp
Tu peux créer une fonction qui effectue le remplacement d'une chaîne donnée en paramètre. Comme dans le fichier "stringutils1.pas" : ce sont des fonctions rajoutées et "génériques".
Il suffit alors ensuite d'appeler plusieurs fois ta fonction en passant chaque fois un mot différent.
Posted: 2009-01-17 23:26:12
by tekmars
Finalement voila ma solution :
Code: Select all
program NewScript;
var
s: string;
begin
SetField(fieldTranslatedTitle, AnsiUpperCase(GetField(fieldTranslatedTitle)));
s := GetField(fieldTranslatedTitle);
s := StringReplace(s, 'RIP ', '');
SetField(fieldTranslatedTitle, s);
SetField(fieldTranslatedTitle, AnsiUpFirstLetter(AnsiLowerCase(GetField(fieldTranslatedTitle))));
end.
Répond parfaitement à mes attentes

Posted: 2009-01-18 00:23:36
by bad4u
Well, your solution might have unwanted effects on original text layout for upper/lower case characters on some titles.. if you put the search string into a constant on the script from above you will have the same expense for changing the "rip" string and add the advantage of keeping all other upper/lower case characters the original way.
Code: Select all
program ReplaceUpperLowerCaseString;
const
SearchString = 'rip '; // (in lower case letters)
ReplaceString = ''; // (if you want to replace with another string)
var
s: string;
StartPos: integer;
begin
s := GetField(fieldTranslatedTitle);
StartPos := pos(SearchString, AnsiLowerCase(s));
while StartPos > 0 do
begin
s := copy(s, 0, StartPos - 1) + ReplaceString + copy(s, StartPos + Length(SearchString), Length(s));
StartPos := pos(SearchString, AnsiLowerCase(s));
end;
SetField(fieldTranslatedTitle, s);
end.
You could even define SearchString and ReplaceString as variables and add input fields, so there's no need to edit the script anymore for changing variables..