Ada 如何将无界字符串转换为整数?

Ada 如何将无界字符串转换为整数?,ada,Ada,我正在学习Ada(通过尝试问题)。首先,我正在尝试开发一些“实用”软件包,这些软件包将有助于文本处理等 我已经成功地编写了一个函数,该函数将从stdin读取数据,并为每个输入行返回一个无界字符串数组 我试图修改该函数以执行相同的操作,但在插入数组之前,将每个无界_字符串转换为整数 这是我的包裹: 获取_stdin.ads: with Ada.Strings.Unbounded; package get_stdin is type IntegerArray is array (Natural

我正在学习Ada(通过尝试问题)。首先,我正在尝试开发一些“实用”软件包,这些软件包将有助于文本处理等

我已经成功地编写了一个函数,该函数将从stdin读取数据,并为每个输入行返回一个
无界字符串数组

我试图修改该函数以执行相同的操作,但在插入数组之前,将每个
无界_字符串
转换为
整数

这是我的包裹:

获取_stdin.ads:

with Ada.Strings.Unbounded;

package get_stdin is
  type IntegerArray is array (Natural range <>) of Integer;
  function get_ints return IntegerArray;

end get_stdin;
我在此过程中使用此程序包调用:

procedure d1 is
  StdinArr : get_stdin.IntegerArray := get_stdin.get_ints;

begin
   null; -- Array processing to follow
end;
这将成功编译,然后我将管道插入输入文本文件:

me@mypc /cygdrive/c/Users/me/aoc2018

$ cat d1.txt
-6
-1
-18
-10
...etc

me@mypc /cygdrive/c/Users/me/aoc2018
$ cat d1.txt | ./d1.exe

raised CONSTRAINT_ERROR : bad input for 'Value: "-6"
“-6”是文本文件中的第一个值。我的字符串到整数的转换代码实际上是从中复制的

  • 我不知道为什么会出现错误的输入
  • 如果在文件中用正整数替换-6,则会引发相同的错误
  • 这是在Windows 10上的Cygwin下运行的
  • 使用
    gnatmake
    7.3.0版编译/链接
注意:我刚刚开始使用Ada,所以我的代码通常可能有很多问题


我做错了什么?我如何修复此函数/包以返回正确填充了
整数的
整数数组
类型?

这是一个行尾问题。我在Windows 10上的cygwin下运行。我的文本文件有Windows样式的行尾

使用
dos2unix

$ cat d1.txt | dos2unix.exe | ./d1.exe
足以使其正常工作


如果有人能准确解释原因,那将很有趣。我猜
Get\u Line
只去掉了
\n
字符,而不是
\r

它对我来说很好(macOS,GNAT CE 2018)。也许你有行尾问题?(虽然,正如我记得的,GNAT在这方面相当有弹性)啊,如果我首先通过dos2unix管道输入,它就会工作。谢谢,我已经检查过了Get_Line Striped Line endings,但是没有特别考虑到-Windows-Line endings。这里实际上不需要使用未绑定的字符串,通常的字符串类型可以很好地从中读取file@TimurSamkharadze我考虑过了,但是我必须为长度指定一个最大尺寸(我想是吧?)因此,无界字符串似乎不太容易在以后断裂…@jfowkes,不,不一定。你可能会这样做,为什么不直接使用原生gnat呢?我更熟悉linux工具,但当我开始这么做的时候,碰巧是在一台运行Windows(但安装了cygwin)的电脑上。
$ cat d1.txt | dos2unix.exe | ./d1.exe