【问题标题】:key value relation on Skip List (DXL/DOORS)跳过列表(DXL/DOORS)上的键值关系
【发布时间】:2013-11-21 10:41:22
【问题描述】:

我正在尝试在数据库中查找相同的登录 ID 用户。

首先,我将每个用户都放在跳过列表中,然后我想逐个比较。我的问题是如何获得 Skiplist 上的键值。

我的代码在这里:

for lUser in userList do {

    string uName = lUser.name
    string uEmail = lUser.email
    string uSys = lUser.systemLoginName
    string uAdr = lUser.address
    outBuf +=  uName sep uSys sep uEmail sep uAdr
    outBuf += "\n"

    // Here I have to add some code, I can put the values but not get again or compare
    // I need some for loop and get every key value
    put(skiplist,count,uSys)
    print count
    print "\n"
    count++
}

有人可以为此提供提示吗,我是这门语言的新手。提前致谢。

编辑:现在可以工作了

    pragma runLim,0
string sep = ";"
string dbName = getDatabaseName
print "\n" "List of doors user in database " getDatabaseName  ": \n\n"
int count = 0
User lUser

Group lGroup
Skip skiplist = create

for lUser in userList do {
  string uName = lUser.name
  string uEmail = lUser.email
  string uSys = lUser.systemLoginName
  string uAdr = lUser.address


  if(null uSys)
  {
    print uName " doesn't have a System Name.\n"
  } else {
    bool flagDuplicate = false
    string nameDuplicate = ""
    string s = ""
    for s in skiplist do {
      if(s == uSys) {
        flagDuplicate = true
        nameDuplicate = (string key skiplist)
        break
      }
    }

    if(flagDuplicate) print "Users '" uName "' and '" nameDuplicate "' have the same System Name (" uSys ").\n"
    else put(skiplist,uName,uSys)

  }
}

pragma runLim,0这一行是为了避免执行时间警告。

【问题讨论】:

    标签: skip-lists ibm-doors


    【解决方案1】:

    听起来您正在寻找的是这样的:

    for lUser in userList do {
      string uName = lUser.name
      string uEmail = lUser.email
      string uSys = lUser.systemLoginName
      string uAdr = lUser.address
      outBuf +=  uName sep uSys sep uEmail sep uAdr
      outBuf += "\n"
    
      if(null uSys)
      {
        print uName " doesn't have a System Name.\n"
      } else {
        bool flagDuplicate = false
        string nameDuplicate = ""
        string s = ""
        for s in skiplist do {
          if(s == uSys) {
            flagDuplicate = true
            nameDuplicate = (string key skiplist)
            break
          }
        }
    
        if(flagDuplicate) print "Users '" uName "' and '" nameDuplicate "' have the same System Name (" uSys ")."
        else put(skiplist,uName,uSys)
    
        print "\n"
      }
    }
    

    编辑:我添加了一个空白uSys 的检查,您可以在那里做任何您想做的事情,如果您只想将所有空的添加到列表中,然后在最后打印出来也可以。

    这至少应该为您指明正确的方向。

    注意:我目前无法测试此代码,因此如果有任何错误或拼写错误,我深表歉意。但我认为它会让你足够接近。

    祝你好运!

    【讨论】:

    • 感谢您的回答,我会尝试这个解决方案。我的目的是从数据库中获取人员 ID,如果不同的人拥有相同的 ID,则检测并将它们打印到屏幕上。所以我认为首先我必须把所有人都加入到skiplist。以后我会从头到尾给大家一一比较。我错了吗 ?有没有更简单的方法来做到这一点?
    • 我不确定我是否理解为什么不同的用户会有相同的系统登录名。但是,如果您确实遇到重复的名称,您想用它做什么?您只是想建立一个数据库中所有唯一系统登录名的列表,还是想打印出任何重复的名称?
    • 因为系统中有些人有时会注册两次或一些区分大小写的问题,所以在数据库中有相同的登录ID用户。例如: login id : ssx101 name : Batuhan BARDAK login id : ssx101 name : Batuhan Bardak 因此,当我尝试使用 ssx101 login_id 登录_id 时,系统无法决定哪个用户尝试连接。 Batuhan BARDAK / Batuhan Bardak 现在我必须获取所有 login_id 并进行比较,如果相同,我必须将 login_id 信息打印到屏幕上。
    • 我更新了答案,我相信这就是你想要的。如果我能提供更多帮助,请告诉我。
    • 就像你说的,这个编辑对我帮助太大了,但还是有问题。我只是认识到有时 login_id 字段为空,因此会发生运行时错误。我像这样更改了我的代码,您可以查看我的编辑,但它仍然不起作用。也许你可以告诉我如何修复这段代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多