我正在学习Ada(尝试https://adventofcode.com/2018/问题)。首先,我正在尝试开发一些“实用程序”软件包,这些软件包将有助于文本处理等。
我已经成功编写了一个函数,该函数将从stdin读取并为每个输入行返回Unbounded_String
s数组。
我正在尝试对该函数进行修改以执行相同的操作,但是在将每个Unbounded_String
转换为Integer
之前,将其插入数组。
这是我的包裹:
get_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;
get_stdin.adb:
with Ada.Text_IO;
with Ada.Text_IO.Unbounded_IO;
with Ada.Strings.Unbounded;
with Ada.Strings;
package body get_stdin is
function get_ints return IntegerArray is
Counter : Natural := 0;
Str : Ada.Strings.Unbounded.Unbounded_String;
Arr : IntegerArray(0..10000);
begin
while not Ada.Text_IO.End_Of_File loop
Str := Ada.Text_IO.Unbounded_IO.Get_Line;
Arr(Counter) := Integer'Value(Ada.Strings.Unbounded.To_String(Str));
Counter := Counter + 1;
end loop;
return Arr(0..Counter-1);
end get_ints;
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”是文本文件中的第一个值。我的字符串到整数的转换代码基本上是从this question复制的。
gnatmake
版本7.3.0编译/链接注意:我刚开始使用Ada,所以我的代码总体上可能存在很多问题。
我在做什么错了,我该如何修复此函数/程序包以返回正确填充了IntegerArray
的{{1}}类型?
答案 0 :(得分:2)
这是行尾问题。我在Windows 10上的cygwin下运行。我的文本文件具有Windows样式的行尾。
使用dos2unix
:
$ cat d1.txt | dos2unix.exe | ./d1.exe
足以使其正常工作。
如果任何人都可以准确解释原因,那将很有趣。我猜测Get_Line
仅去除\n
字符,而不去除\r
。