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 :

Identifier expected but 'STRING' found


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Identifier expected but 'STRING' found
    j'ai le code qui permet de générer l'exception Exception class EConvertError with message ''' is not a valid floating point value'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function CustomStrToFloat(string : variant): double;
    begin
      if (string = null) or (Trim(string) = '') then Result := 0
      else Result := StrToFloat(string);
    end;
    on compilant j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Error] UMAJ_Prod.pas(134): Identifier expected but 'STRING' found

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    c'est quelque part normal puisque : string est un mot réservé et "redéclaré" comme variant

    déjà quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function CustomStrToFloat(astring : String): double;   // ou astring : variant
    begin
      if astring.isEmpty then Result := 0
      else if not trystrtofloat(astring,Result) then result:=0;  
    end;
    mais si le code se résume à ça je me demande vous êtes fâché avec les fonctions déjà existante comme StrToFloatDef qui fera exactement la même chose ?

    StrToFloatDef('200.00',0); -> 0 formatsettings d'un windows en français
    StrToFloatDef('200,00',0); -> 200 formatsettings d'un windows en français

    StrToFloatDef('200.00',0,aFormatSettings.Create(EN_US)); -> 200

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    StrToFloatDef('200.00',0); // -> 0  formatsettings d'un windows en français
    StrToFloatDef('200,00',0); // -> 200 // formatsettings d'un windows en français
     
    StrToFloatDef('200.00',0,aFormatSettings.Create(EN_US)); // -> 200

    je pense que ça marche pas avec la version 7 du Delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_DM.T_ProdMarge.Value:=StrToFloatDef((DBEDIT8.Text),0); ?
    erreur :
    [Error] UMAJ_Prod.pas(455): Incompatible types: 'Integer' and 'Extended'

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Déjà, il fallait savoir que c'était D7 ! mais peu importe StrFloatDef existait

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_DM.T_ProdMarge.Value:=StrToFloatDef((DBEDIT8.Text),0); ?
    Qu'est-ce que vous voulez faire avec ça !
    DBEdit8 est bien un Edit en relation avec un champ de table : donc utilisez la champ de la table plutôt que le text
    prenez aussi l'habitude d'utiliser des as<type> plutôt que value



    enfin, quel est le type du champ de marge ? à priori un entier si j'en crois le message.


    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
    procedure TForm23.Button2Click(Sender: TObject);
    function myconverter(astring : variant) : Double;
    begin
     if VarIsNull(aString) then result:=10.15
     else if (not TryStrToFloat(astring,result)) then result:=0
    end;
     
    begin
    Memo1.Lines.Add(format('StrToFloatDef(''200.00'',0) -> %3.2f',[StrToFloatDef('200.00',0)])); // -> 0  formatsettings d'un windows en français
    Memo1.Lines.Add(format('StrToFloatDef(''200,00'',0) -> %3.2f',[StrToFloatDef('200,00',0)])); // -> 200 // formatsettings d'un windows en français
    Memo1.Lines.Add(format('StrToFloatDef(''200.00'',0,Formattsettings) -> %3.2f',[StrToFloatDef('200.00',0,TFormatSettings.Create('EN-US'))])); // -> 200
     
    Memo1.Lines.Add(format('myconverter(''200.00'',0) -> %3.2f',[myconverter('200.00')]));  // 0
    Memo1.Lines.Add(format('myconverter(''200,00'',0) -> %3.2f',[myconverter('200,00')]));
    Memo1.Lines.Add(format('myconverter('''',0) -> %3.2f',[myconverter('')]));
    Memo1.Lines.Add(format('myconverter(null,0) -> %3.2f',[myconverter(null)])); // donne valeur par defaut definie dans la fonction
    end;

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par SergioMaster Voir le message

    enfin, quel est le type du champ de marge ? à priori un entier si j'en crois le message.
    oui INTEGER

    pour les date comment on peut reformuler la fonction?

    PS : j'ai utilisé ces fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //   FLOAT
    function NVLINT( astring : variant): double;   // ou astring : variant
    begin
      if astring.isEmpty then Result := 0
      else if not trystrtofloat(astring,Result) then result:=0;
    end;
     
    //   INT
    function NVLFLOAT( astring : variant): integer;   // ou astring : variant
     begin
      if (astring = null) or (Trim(astring) = '') Or (astring = '')  then Result := 0
      else Result := StrToInt(astring);
    end;

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    oui INTEGER
    donc il aurait fallu faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_DM.T_ProdMarge.Value:=Trunc(CustomStrToInt(DBEDIT8.Text)); // dépend de comment vous voulez arrondir
    MAIS, Vous vous embêtez inutilement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    F_DM.T_ProdMarge.asInteger:=DBEdit8.Field.asInteger;
    // ou 
    //F_DM.T_ProdMarge.asInteger:=Trunc(DBEdit8.Field.asFloat);
    // ou Ceil ou Floor ou Round selon arrondi souhaité
    je me demande bien ce qui vous pousse à ce besoin !

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    c'est quelque part normal puisque : string est un mot reservé et "redéclaré" comme variant
    même en utilisant les fonctions, ça génère le même code erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // pour Float
    function CustomStrToFloat( astring : variant): double;   // ou astring : variant
    begin
      if astring.isEmpty then Result := 0
      else if not trystrtofloat(astring,Result) then result:=0;
    end;
     
    //   pour int 
    function CustomStrToInt( astring : variant): integer;   // ou astring : variant
    begin
      if astring.isEmpty then Result := 0
      else if not trystrtoInt(astring,Result) then result:=0;
    end;

    F_DM.T_ProdMarge.Value:=CustomStrToInt(DBEDIT8.Text); donne une erreur Exception class EConvertError with message ''' is not a valid floating point value'.

Discussions similaires

  1. [Free Pascal] Erreur ''identifier'' expected but '':'' found
    Par aaa98 dans le forum Free Pascal
    Réponses: 6
    Dernier message: 18/01/2015, 15h30
  2. Réponses: 8
    Dernier message: 21/06/2011, 20h01
  3. Réponses: 2
    Dernier message: 13/11/2008, 17h44
  4. [Dev-Pascal] Syntax error : unit expected but program found
    Par [R]Viper dans le forum Autres IDE
    Réponses: 13
    Dernier message: 05/01/2007, 12h12
  5. Erreur Declaration expected but identifier ?
    Par dederfred dans le forum Delphi
    Réponses: 1
    Dernier message: 15/11/2006, 08h33

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