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 :

Exception erreur ElnOutError (Saisie numérique invalide)


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Exception erreur ElnOutError (Saisie numérique invalide)
    Bonjour,

    Je n'arrive pas à comprendre mon erreur dans ce bout de code qui fonctionne très bien avec une application console en "pascal"... Lorsque je tente de le passer en Delphi, j'ai une erreur ElnOutError "Saisie numérique invalide"...

    Donc je cherche simplement à lire un fichier texte et lorsqu'il y'a pas de nombre dans ce fichier, il l'affiche dans une autre liste simplement chainée les données suivantes.

    Exemple de donnés dans le fichier :

    1 2 3 | 4 5 6

    Liste chainé A : 123
    Liste chainé B : 456

    Voici le bout de code qui coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while not EoLn(Fich) do
    try
    // valeur suivante du fichier (donné numérique ou | pour la separation voir exemple ci-dessus)
    read(Fich, x);
     
    // boolean existe évidemment...
    if (gagnante) then inserer_liste(tab[i].listeA,x) else
    		   inserer_liste(tab[i].listeB,x);
     
    except // Erreur lecture d’un nombre ?
    On Exception Do
    gagnante:=false;
    end; // Try

    J'ai remarqué qu'il y'avait un problème car lorsque j'affichais la liste A ou la liste B, je n'avais pas les données correct (soit les données sont dans toute la liste A, soit dans toute la liste B mais pas correctement bien réparti).

    Pourtant, je me répete en application console/pascal, ça fonctionne très bien...

    D'avance, je vous remercie pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut delphi
    Enfait cette erreur je l'ai uniquement quand je le lance via F9.. Si j'appuie par moi même dans le dossier... je n'ai pas cette erreur et le code fonctionne bien!!!

    Comment puis-je faire pour que Delphi ne m'affiche plus cette erreur ? J'ai testé un mode de compilation {-} mais alors le code ne fonctionne plus du tout (ce que je disais sur le post ci-dessus).

  3. #3
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    he he he

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    program Project43;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows, SysUtils, Classes, Contnrs;
     
    // creation d'un liste pour les valeurs entières
    type
      TIntegerList = class(TList)
      private
        FLast: integer;
        FFirst: integer;
        function GetInt(index: integer): integer;
        procedure SetInt(index: integer; const Value: integer);
      published
      public
        property Items[index: integer]: integer read GetInt write SetInt;
        function First: integer;
        function Last: integer;
        function Add(const Value: integer): integer;
        function IndexOf(const Value: integer): integer;
      end;
     
    { TIntegerList }
     
    function TIntegerList.Add(const Value: integer): integer;
    begin
      result := inherited Add(pointer(Value));
    end;
     
    function TIntegerList.First: integer;
    begin
      result := integer(inherited First);
    end;
     
    function TIntegerList.GetInt(index: integer): integer;
    begin
      result := integer(inherited Items[index]);
    end;
     
    function TIntegerList.IndexOf(const Value: integer): integer;
    begin
      result := inherited IndexOf(pointer(Value));
    end;
     
    function TIntegerList.Last: integer;
    begin
      result := integer(inherited Last);
    end;
     
    procedure TIntegerList.SetInt(index: integer; const Value: integer);
    begin
      inherited items[index] := pointer(Value);
    end;
     
    // ----------------------------------------------------------------------- //
     
    var
      // Liste A et B
      ListA, ListB: TIntegerList;
     
      // Nom du fichier des données
      FileName : string;
     
      // Borne des données pour liste A et B
      IFLA, ITLA,
      IFLB, ITLB : integer;
     
      // compteur pour les boucles
      N : integer;
     
    begin
      // creation des listes
      ListA := TIntegerList.Create;
      ListB := TIntegerList.Create;
      try
        // récupération du fichier de données
        FileName := ExtractFilePath(ParamStr(0))+'Data.txt';
     
        // utilisation d'une TStringList
        with TStringList.Create do
        try
          // chargement des données
          LoadFromFile(FileName);
     
          // séléction du délimiteur de données, ici un espace
          Delimiter     := ' ';
     
          // découpage
          DelimitedText := Text;
     
          // si on as au moins 3 lignes : "1 | 2" par exemple
          if count > 3 then
          begin
            // borne min liste A
            IFLA := 0;
            // borne max liste A
            ITLA := IndexOf('|')-1;
     
            // borne min liste B
            IFLB := ITLA+2;
            // borne max liste B
            ITLB := Count-1;
     
            // affichage
            Write('List A : ');
            for N := IFLA to ITLA do
            begin
              // récupération et listage
              ListA.Add( StrToIntDef(Strings[N], -1) );
     
              // affichage
              if N < ITLA then
                write(Strings[N],', ')
              else
                writeln(Strings[N]);
            end;
     
            // affichage
            write('List B : ');
            for N := IFLB to ITLB do
            begin
              // récupération et listage
              ListB.Add( StrToIntDef(Strings[N], -1) );
     
              // affichage
              if N < ITLB then
                write(Strings[N], ', ')
              else
                writeln(Strings[N]);
            end;
          end;
        finally
          // libération de la stringlist
          Free;
        end;
      finally
        // libération des listes.
        ListB.Free;
        ListA.Free;
      end;
     
      // attente d'appuis sur une touche
      readln;
    end.

    compatible avec la forme de fichier :

    1 2 3 | 4 5 6

    12 13 14 | 1024 1025 1026

    pourra supporter plusieurs autre liste en répétant l'opération :

    1 2 3 | 4 5 6 | 7 8 9

    peut également, aprés modification supporté ce format :

    LA: 1 2 3 4 5 6
    LB: 1 2 3 4 5 6 7 8 9 0
    LC: 1 2 3 4 5 6 7 8

    ou ce format :

    1,2,3,4,5,6,|,1,2,4,8,16,32,64,128

    on pourrait, si les nombres ne sont compris qu'entre 0 et 9 utiliser un memorystream.

    d'une manière générale, on ne provoque pas d'exception pour changer un etat dans le traitement.
    on travaillera une condition sur la données (si egal à ... alors ...)
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. [PHP-JS] Forcer une saisie numérique
    Par Empty_body dans le forum Langage
    Réponses: 9
    Dernier message: 04/10/2011, 18h46
  2. Saisie numérique...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/01/2006, 19h21
  3. [vb.net][exception] erreur incomprehensible
    Par arnolem dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/01/2006, 14h33
  4. DBGrid personnalisé (controle de saisie numérique et date).
    Par abdelghani_k dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/04/2005, 18h50
  5. Réponses: 25
    Dernier message: 23/11/2004, 18h20

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