Frédéric Praca
2018-06-11 19:05:10 UTC
Salut à tous,
je me posais une petite question toute bête.
J'ai un fichier qui contient des valeurs entières représentant
normalement des températures comprises entre -273 et 5526.
Le problème est que ce fichier peut parfois contenir des valeurs hors
plage.
Quel est le "meilleur" moyen pour traiter ça ? Un test d'appartenance ou
la gestion des exceptions ?
Voilà deux exemples :
Un avec exception
with Ada.Text_Io; use Ada.Text_Io;
procedure Temperature_Test is
type Temperature is range -273..5526;
package Temperature_IO is new Integer_Io(Temperature);
use Temperature_IO;
begin
loop
declare
Read_Temperature : Temperature;
begin
Get(Read_Temperature);
Put_line("Read temperature : " &
Temperature'Image(Read_Temperature));
exception
when Data_Error =>
Put_Line("Pan");
when End_Error =>
exit;
end;
end loop;
end Temperature_Test;
L'autre par appartenance
with Ada.Text_Io; use Ada.Text_Io;
procedure Temperature_Test2 is
subtype Temperature is Integer range -273..5526;
package Integer_Text_IO is new Integer_Io(Integer);
use Integer_Text_IO;
begin
loop
declare
Read_Temperature : Temperature;
Read_Int : Integer;
begin
Get(Read_Int);
if Read_Int in Temperature'Range then
Read_Temperature := Temperature(Read_Int);
Put_line("Read temperature : " &
Temperature'Image(Read_Temperature));
end if;
exception
when End_Error =>
exit;
end;
end loop;
end Temperature_Test2;
Dans un cas, j'utilise un type et dans l'autre un sous-type et j'avoue
que je ne sais pas toujours quand utiliser l'un ou l'autre :)
Mais le test d'appartenance ne peut, bien entendu, fonctionner qu'avec le
sous-type.
Alors ? C'est quoi le mieux ?
Fred
je me posais une petite question toute bête.
J'ai un fichier qui contient des valeurs entières représentant
normalement des températures comprises entre -273 et 5526.
Le problème est que ce fichier peut parfois contenir des valeurs hors
plage.
Quel est le "meilleur" moyen pour traiter ça ? Un test d'appartenance ou
la gestion des exceptions ?
Voilà deux exemples :
Un avec exception
with Ada.Text_Io; use Ada.Text_Io;
procedure Temperature_Test is
type Temperature is range -273..5526;
package Temperature_IO is new Integer_Io(Temperature);
use Temperature_IO;
begin
loop
declare
Read_Temperature : Temperature;
begin
Get(Read_Temperature);
Put_line("Read temperature : " &
Temperature'Image(Read_Temperature));
exception
when Data_Error =>
Put_Line("Pan");
when End_Error =>
exit;
end;
end loop;
end Temperature_Test;
L'autre par appartenance
with Ada.Text_Io; use Ada.Text_Io;
procedure Temperature_Test2 is
subtype Temperature is Integer range -273..5526;
package Integer_Text_IO is new Integer_Io(Integer);
use Integer_Text_IO;
begin
loop
declare
Read_Temperature : Temperature;
Read_Int : Integer;
begin
Get(Read_Int);
if Read_Int in Temperature'Range then
Read_Temperature := Temperature(Read_Int);
Put_line("Read temperature : " &
Temperature'Image(Read_Temperature));
end if;
exception
when End_Error =>
exit;
end;
end loop;
end Temperature_Test2;
Dans un cas, j'utilise un type et dans l'autre un sous-type et j'avoue
que je ne sais pas toujours quand utiliser l'un ou l'autre :)
Mais le test d'appartenance ne peut, bien entendu, fonctionner qu'avec le
sous-type.
Alors ? C'est quoi le mieux ?
Fred