From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed3-a.proxad.net!nnrp1-1.free.fr!not-for-mail Newsgroups: comp.lang.ada References: <5126648c-215e-4d9e-bdd9-82fa5b510896n@googlegroups.com> From: DrPi <314@drpi.fr> Subject: Re: From_string(Arg : String) return Big_Integer Date: Sat, 9 Jan 2021 23:13:15 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <5126648c-215e-4d9e-bdd9-82fa5b510896n@googlegroups.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Message-ID: <5ffa2a7b$0$19459$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 09 Jan 2021 23:13:15 CET NNTP-Posting-Host: 82.65.30.55 X-Trace: 1610230395 news-2.free.fr 19459 82.65.30.55:64550 X-Complaints-To: abuse@proxad.net Xref: reader02.eternal-september.org comp.lang.ada:61085 List-Id: Le 09/01/2021 à 21:11, soren rundgren a écrit : > lördag 9 januari 2021 kl. 18:00:36 UTC+1 skrev AdaMagica: >> Since Ada 202X is not yet released, this package is not yet fully implemented. (I had a conversation with AdaCore about a similar case a year ago.) > > I managed to make a very basic solution by creating my own: > > function My_From_String(S : String) return Big_Integer is > sum : Big_Integer := 0; > Len : constant Integer := S'Length; > i : Integer := 1; > begin > -- Ada.Text_IO.Put_Line("My_From_String.S = " & S); > while i <= Len loop > case S(i) is -- i = Len : Len - Len = 0, > -- i = 1 : Len - 1 > when '1' => sum := sum + 1*10**(Len - i); > when '2' => sum := sum + 2*10**(Len - i); > when '3' => sum := sum + 3*10**(Len - i); > when '4' => sum := sum + 4*10**(Len - i); > when '5' => sum := sum + 5*10**(Len - i); > when '6' => sum := sum + 6*10**(Len - i); > when '7' => sum := sum + 7*10**(Len - i); > when '8' => sum := sum + 8*10**(Len - i); > when '9' => sum := sum + 9*10**(Len - i); > when others => null; > end case; > i := i + 1; > end loop; > return sum; > end My_From_String; > A much simpler function for Integer : function Int_From_String (Str : String) return Integer is Num : Integer := 0; begin for C of Str loop Num := (Num * 10) + Integer'Value((1 => C)); end loop; return Num; end Int_From_String; Notes : - I don't have a 202x compiler, so I can't check if it works with big ints. - It does not manage the sign (like the function you designed).