将一组数字转换为字符串

3
我想将MySet = set of 1..8中的数字保存到MyString : String中。是否有像IntToStr这样的函数可以实现?
我有一个调度程序,它以(* * * * * * * *)的形式接收字符串。其中一个星号表示执行的日期,而MySet是日期列表。例如,1代表星期一,2代表星期二。我必须将集合中的数字保存到该字符串中,使其看起来像这样:(0 0 15 * * * 1,2,3 *)。 这意味着调度程序将在每周一、周二、周三的15:00触发。 如果您想了解更多关于此格式的信息:http://www.nncron.ru/help/EN/working/cron-format.htm

我非常怀疑 - 你很可能需要为自定义类型自己编写一个。你期望什么样的输出字符串?用空格分隔?逗号?破折号? - Jerry Dodge
请查看以下链接:http://tondrej.blogspot.it/2007/10/settostring-stringtoset.html - fantaghirocco
你尝试过使用Ord()将单个元素转换为整数,然后将结果串联起来吗? - MartynA
即使这是关于string2set的问题,也有你感兴趣的情况:https://dev59.com/NFjUa4cB1Zd3GeqPPkAm - fantaghirocco
@JerryDodge 只是为了给原帖作者一个起点。 - fantaghirocco
显示剩余8条评论
1个回答

6
使用for..in迭代器生成所需的字符串:
Type
  MySet = set of 1..8;

function MySetToString(const s: MySet): String;
var
  i: Integer;
begin
  Result := '';
  for i in s do begin
    Result := Result + IntToStr(i) + ',';
  end;
  SetLength(Result,Length(Result)-1);
end;

是的,这对于OP最初的问题有效,但评论揭示了他们真正想要格式化CRON表达式,其中set甚至不适用。 - Jerry Dodge
@JerryDodge,有几个cron版本。 - LU RD
我只是按照问题中所述的字符串值 OP 想要生成的方式进行操作 (0 0 15 * * * 1,2,3 *) - Jerry Dodge
1
@ReyesJ。然而,真正的问题更深层次。您不应该格式化字符串,然后取消格式化它,只是为了再次重新格式化它(就我理解您的意图而言)。只需按照第一次需要的方式序列化表达式即可。我并不是说这个答案是错误的,事实上我说它是正确的。它只是不是您所需要的。 - Jerry Dodge
1
文档中令人失望的一点是没有关于集合枚举顺序的陈述。我认为我们都知道项是按升序排列的序数值进行枚举。但令人沮丧的是,文档没有这样的说明。 - David Heffernan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接