From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.129.81.142 with SMTP id f136mr27971388ywb.28.1440516384378; Tue, 25 Aug 2015 08:26:24 -0700 (PDT) X-Received: by 10.182.129.200 with SMTP id ny8mr131555obb.12.1440516384346; Tue, 25 Aug 2015 08:26:24 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!border1.nntp.ams1.giganews.com!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!newspeer1.nac.net!border2.nntp.dca1.giganews.com!nntp.giganews.com!s36no1291798qgs.1!news-out.google.com!nt1ni14690igb.0!nntp.google.com!u8no189962igq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Tue, 25 Aug 2015 08:26:24 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.186.238.49; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S NNTP-Posting-Host: 31.186.238.49 References: <1rjn2z0rjbo2j$.1beneepusolhh.dlg@40tude.net> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <1c1a3b38-4810-4002-b4f5-ec09b5f97041@googlegroups.com> Subject: Re: Creating an empty file with Ada.Text_IO From: Maciej Sobczak Injection-Date: Tue, 25 Aug 2015 15:26:24 +0000 Content-Type: text/plain; charset=ISO-8859-1 X-Original-Bytes: 2320 Xref: news.eternal-september.org comp.lang.ada:27608 Date: 2015-08-25T08:26:24-07:00 List-Id: > procedure Write_String_To_File (File_Name : in String; S : in String) is > A : Ada.Streams.Stream_Element_Array (1 .. S'Length); > F : Ada.Streams.Stream_IO.File_Type; > begin > -- convert S to stream elements > for I in S'Range loop > A (Ada.Streams.Stream_Element_Offset (I)) := > Ada.Streams.Stream_Element (Character'Pos (S (I))); > end loop; Before anybody uses it in a rocket - there is no provision above that S'First will be 1 and the indices might not be compatible in the above assignment. Correct version is: for I in S'Range loop A (Ada.Streams.Stream_Element_Offset (I - S'First + 1)) := Ada.Streams.Stream_Element (Character'Pos (S (I))); end loop; And there are actually several ways to write it. Now this procedure can write String slices that do not begin at index 1. (Frankly, this part of Ada is inherently error-prone. I stumble on it repeatedly.) -- Maciej Sobczak * http://www.inspirel.com