Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将LDAP解析为Ruby数据?_Ruby_Ldap - Fatal编程技术网

如何将LDAP解析为Ruby数据?

如何将LDAP解析为Ruby数据?,ruby,ldap,Ruby,Ldap,我正在尝试使用我拥有的LDAP用户数据库,并且我已经进行了一些以前的文本处理,因此我有如下文本: uid: angelica cn: Angelica Turaca homeDirectory: /home/exaluno/angelica mail: angelica@linux.ime.usp.br, uid: ljunior cn: Lourinaldo Anastacio da Silva Junior homeDirectory: /home/exaluno/ljunior mail

我正在尝试使用我拥有的LDAP用户数据库,并且我已经进行了一些以前的文本处理,因此我有如下文本:

uid: angelica
cn: Angelica Turaca
homeDirectory: /home/exaluno/angelica
mail: angelica@linux.ime.usp.br,

uid: ljunior
cn: Lourinaldo Anastacio da Silva Junior
homeDirectory: /home/exaluno/ljunior
mail: ljunior@linux.ime.usp.br,

uid: acvm
cn: Ana Cristina Vieira de Melo
homeDirectory: /home/prof/acvm
mail: acvm@linux.ime.usp.br,
它包含我想要的所有数据。我只是想把它转换成:

users[0]['uid'] #angelica
users[1]['mail'] #ljunior@linux.ime.usp.br

最简单的方法是什么?

这并不漂亮,但有些正则表达式可以很快完成这项工作:

obj = {}
users = []

ldap_file.each_line do |line|
  if line =~ /([^:]+): (.*?),?$/
    obj[$1] = $2
    if line =~ /,$/
      users << obj
      obj = {}
    end
  else
    warn "Failed to match: #{line}"
  end
end

这并不漂亮,但有些正则表达式可以很快完成这项工作:

obj = {}
users = []

ldap_file.each_line do |line|
  if line =~ /([^:]+): (.*?),?$/
    obj[$1] = $2
    if line =~ /,$/
      users << obj
      obj = {}
    end
  else
    warn "Failed to match: #{line}"
  end
end

从Ruby 1.9开始,我使用了在using definition中描述的解决方案


从Ruby 1.9开始,我使用了在using definition中描述的解决方案

str=“Angelica Turaca”,
#“homeDirectory”=>“/home/exaluno/angelica”,
#“邮件”=>“angelica@linux.ime.usp.br,"},
#{“uid”=>“ljunior”,“cn”=>“Lourinaldo Anastacio da Silva Junior”,
#“homeDirectory”=>“/home/exaluno/ljunior”,
#“邮件”=>“ljunior@linux.ime.usp.br,"},
#{“uid”=>“acvm”,“cn”=>“安娜·克里斯蒂娜·维埃拉·德梅洛”,
#“homeDirectory”=>“/home/prof/acvm”,“邮件”=>”acvm@linux.ime.usp.br,"}]   
用户[0]['uid']#=>“angelica”
用户[1]['mail']#=>”ljunior@linux.ime.usp.br,"
如果您不想在最后一个返回值的末尾加逗号,这很容易处理。

str=“Angelica Turaca”,
#“homeDirectory”=>“/home/exaluno/angelica”,
#“邮件”=>“angelica@linux.ime.usp.br,"},
#{“uid”=>“ljunior”,“cn”=>“Lourinaldo Anastacio da Silva Junior”,
#“homeDirectory”=>“/home/exaluno/ljunior”,
#“邮件”=>“ljunior@linux.ime.usp.br,"},
#{“uid”=>“acvm”,“cn”=>“安娜·克里斯蒂娜·维埃拉·德梅洛”,
#“homeDirectory”=>“/home/prof/acvm”,“邮件”=>”acvm@linux.ime.usp.br,"}]   
用户[0]['uid']#=>“angelica”
用户[1]['mail']#=>”ljunior@linux.ime.usp.br,"
如果您不想在最后一个返回值的末尾加逗号,这很容易处理。

请阅读“和链接页面”和。我们希望看到您尝试过的最简单的示例,而不是从头开始编写一个完整的脚本,该脚本可能适合您所编写的内容,也可能不适合您所编写的内容。我们也可能在不经意间复制您的代码,浪费我们的时间。“最简单的方法是什么”取决于你已经尝试了什么,对吗?请阅读“和链接页面”,以及。我们希望看到您尝试过的最简单的示例,而不是从头开始编写一个完整的脚本,该脚本可能适合您所编写的内容,也可能不适合您所编写的内容。我们也可能在不经意间复制您的代码,浪费我们的时间。“最简单的方法是什么”取决于你已经尝试了什么,对吗?
def to_hash(str)
  Hash[
    str.split(';').map do |pair|
      k, v = pair.split('=', 2)
      [k, v.to_i]
    end
  ]
end
str =<<_
uid: angelica
cn: Angelica Turaca
homeDirectory: /home/exaluno/angelica
mail: angelica@linux.ime.usp.br,

uid: ljunior
cn: Lourinaldo Anastacio da Silva Junior
homeDirectory: /home/exaluno/ljunior
mail: ljunior@linux.ime.usp.br,

uid: acvm
cn: Ana Cristina Vieira de Melo
homeDirectory: /home/prof/acvm
mail: acvm@linux.ime.usp.br,
_

users = str.split(/\n\n+/).each_with_object([]) do |s,a|
  a << s.each_line.with_object({}) do |line,h|
    k,v = line.strip.split(/:\s*/)
    h[k] = v
  end
end
  #=> [{ "uid"=>"angelica", "cn"=>"Angelica Turaca",
  #      "homeDirectory"=>"/home/exaluno/angelica", 
  #      "mail"=>"angelica@linux.ime.usp.br,"},
  #    { "uid"=>"ljunior", "cn"=>"Lourinaldo Anastacio da Silva Junior",
  #      "homeDirectory"=>"/home/exaluno/ljunior",
  #      "mail"=>"ljunior@linux.ime.usp.br,"},
  #    { "uid"=>"acvm", "cn"=>"Ana Cristina Vieira de Melo",
  #      "homeDirectory"=>"/home/prof/acvm", "mail"=>"acvm@linux.ime.usp.br,"}]   

users[0]['uid']   #=> "angelica"
users[1]['mail']  #=> "ljunior@linux.ime.usp.br,"