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

Langage Delphi Discussion :

Comment écrire ce script ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Mvu
    Mvu est déconnecté
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par défaut Comment écrire ce script ?
    Bonjour,
    J'utilise actuellement le script suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF(POS('CABINET',SC2)>0,COPY(SC2,1,POS('CABINET',SC2)-1)+COPY(SC2,POS('CABINET',SC2)+12,LENGTH(SC2)-POS('CABINET',SC2)+12)+'/ '+SC1,SC2)
    pour récupérer un string tout en éliminant des caractères parasites.
    Exemple:
    MEUBLE B HAUT CABINET_18049 devient MEUBLE B HAUT 9/DOOR (DOOR =SC1)
    ou
    MEUBLE FOUR CABINET_2 devient MEUBLE FOUR /TRV-HT (TRV-HT = SC1)
    Bref c'est pas terrible.
    J'aimerais savoir s'il est possible d'écrire un script qui ferait ceci:
    - démarrer depuis le dernier caractère de SC2
    - remonter en arrière
    - éliminer tous les caractères jusqu'à la première occurrence d'un espace.
    Exemple: MEUBLE B HAUT CABINET_18049 deviendrait MEUBLE B HAUT

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 994
    Par défaut
    De ce que je constate, tu souhaites simplement enlever la partie correspond à "CABINET_" suivi d'une suite de nombre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pattern := 'CABINET_\d+';
    Input := 'Bla bla avant CABINET_1234 bla bla après';
    Regex := TRegEx.Create(Pattern);
    Result := Regex.Replace(Input , '');

  3. #3
    Mvu
    Mvu est déconnecté
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par défaut
    Bonjour,
    Oui c'est cela mais le problème c'est que le nombre de caractères qui suit CABINET_ n'est pas fixe. Au minimum il y e a 4. Je pense qu'il y en a rarement plus de 6.
    Mais on ne peut pas continuer sur cette voie, car parfois, dans le string, il n'y a tout simplement pas le terme CABINET_
    Raison pour laquelle je me disais que la méthode la plus sûre est de
    - compter le nombre de caractères dans SC2
    - compter à rebours
    - éliminer tous les caractères jusqu'à la première occurrence d'un espace
    Bàt.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    En pure Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function ShortText(const aText :string) :string;
    begin
      const i = aText.LastDelimiter(' ');
     
      if i > -1
      then Result := aText.Substring(0, i)
      else Result := aText;
    end;
    et par expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ShortText(const aText :string) :string;
    begin
      Result := TRegEx.Replace(aText, '(.*) .*', '$1');
    end;

  5. #5
    Mvu
    Mvu est déconnecté
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par défaut
    Je te crois :-)
    Peux-tu télécharger ce fichier: https://www.woodlab.eu/files/ImportASCII.zip
    C'est le script d'importation des données depuis une application de CAO 3D.
    Les développeurs du logiciel en Italie m'ont toujours dit que c'était du Delphi.
    Comment faire pour intégrer ton script en remplacement de la ligne n° 32 ?
    A+

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Si tu veux injecter un texte de remplacement à partir du numéro extrait, je devine une table de correspondance


    C'est un codé écrit directement sur le forum révisé sous Delphi, il peut y a voir une petite erreur -1/+1 dans les positions
    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
     
    function GetDescriptionByNum(const Num: string): string;
    const
      ASSOC: array[0..2] of record Num: string; Desc: string end =
        (
          (Num: '18049'; Desc: '9/DOOR (DOOR =SC1)'),
          (Num: '2'    ; Desc: '/TRV-HT (TRV-HT = SC1)'),
          (Num: '4'    ; Desc: 'en plein milieu')
        );
    var
      I: Integer;
    begin
      for I := Low(ASSOC) to High(ASSOC) do
        if ASSOC[I].Num = Num then
          Exit(ASSOC[I].Desc);
     
      Result := '[Not Found]';
    end;
     
    function RemplaceCabinet(const SC2: string): string;
    const
       TAG_BASE = 'CABINET_';
    var
      iStartTag, iStartNum, iEndTag: Integer;
      Tag, Num, Remplacement: string;
    begin
      iStartTag := Pos(TAG_BASE, SC2);
      if iStartTag > 0 then
      begin
        iStartNum := iStartTag + Length(TAG_BASE);
        iEndTag := Pos(' ', SC2, iStartTag);
        if iEndTag <= 0 then
          iEndTag := Length(SC2) + 1;
     
        Tag := Copy(SC2, iStartTag, iEndTag - iStartTag);
        Num := Copy(SC2, iStartNum, iEndTag - iStartNum);
     
        // ici un recherche dans une table pour convertir Num en la chaine correspondante
        Remplacement := GetDescriptionByNum(Num);
     
        result := Copy(SC2, 1, iStartTag - 1) + Remplacement + Copy(SC2, iEndTag);
      end
      else
        result := '?';
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(RemplaceCabinet('MEUBLE B HAUT CABINET_18049'));
      ShowMessage(RemplaceCabinet('MEUBLE FOUR CABINET_2'));
      ShowMessage(RemplaceCabinet('MEUBLE FOUR CABINET_4 avec la suite'));
    end;



    Par contre, ce n'est pas du Script, Delphi produit un EXE, c'est compilé
    Pourquoi parler de Script ?

    Quelle version de Delphi ?
    Non je n'ai pas regardé le zip, aucune personne censée ne télécharge un fichier d'une source inconnue.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    IF(Condition, SiVrai, SiFaux) ressemble à du Pascal mais n'est pas du Delphi.

    S'il y a un interpréteur de commande, ben il faut savoir précisément les commandes disponibles, que l'app CAO soit en Delphi ou pas.

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

Discussions similaires

  1. comment executer un script perl svp?
    Par nico72 dans le forum Langage
    Réponses: 8
    Dernier message: 13/07/2005, 09h51
  2. [VB.NET] comment écrire du texte avec opengl?
    Par ero_senin dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/01/2005, 13h34
  3. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16
  4. [DEBUTANT]Comment executer un script sql
    Par peaceinpal dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2004, 08h44
  5. Comment écrire explicitement en sortie d'un job OEM ?
    Par zestrellita dans le forum Entreprise Manager
    Réponses: 11
    Dernier message: 11/03/2004, 09h36

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