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