【问题标题】:How to parse string in Ada with whitespaces如何用空格解析 Ada 中的字符串
【发布时间】:2014-11-02 04:10:26
【问题描述】:

我正在使用Get_Line 从用户那里获得输入, 字符串可以是一个命令后跟一个值(命令---一个或多个空格---值---换行),

CMD  4
CMD 6
CMD        10

如何解析单个变量中的命令和值?

到目前为止,我可以在空格之前解析字符串,但是在空格之后如何获取值并将其转换为整数?

        for I in ip'Range loop
            if ip(I) = ' ' or ip(I) = HT then
                Put_Line(CMD);
                Put_Line(Integer'Image(Index));
            else
                CMD(I) := ip(I);
                Index := Index+1;
            end if;
        end loop;

--

谢谢

【问题讨论】:

  • 提示:研究正则表达式。
  • @NWS -- 虽然 RegEx 适用于这个特定问题,但我不能凭良心推荐它。作为一名维护程序员,RegEx 一直是痛苦的根源:太脆弱了,而且经常在不恰当的时候使用(例如“解析”CSV)。
  • @Shark8 关于正则表达式的缺点的好点,但是关于它对 OPs 问题的实际适用性,我们几乎没有什么可继续的。

标签: ada gnat


【解决方案1】:
with Ada.Text_IO;

procedure Simple_Command_Parser_1 is
   type Commands is (CMD);
   type Values is range 4 .. 10;

   package Command_Text_IO is new Ada.Text_IO.Enumeration_IO (Commands);
   package Value_Text_IO   is new Ada.Text_IO.Integer_IO     (Values);

   Command : Commands;
   Value   : Values;
begin
   loop
      Command_Text_IO.Get (Command);
      Value_Text_IO.Get   (Value);
      Ada.Text_IO.Skip_Line;
   end loop;
end Simple_Command_Parser_1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2019-12-04
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多