gpt4 book ai didi

ruby - 从变量中获取元素?

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:15 25 4
gpt4 key购买 nike

我需要使用正则表达式提取元素。

首先我从一个函数读取文件,然后从第二个函数读取另一个文件并提取一个值。

在处理第二个函数的读取时,我从第一个文件中获取值:

#function read file
def get_file_as_string(filename)
data = ''
f = File.open(filename, "r")
f.each_line do |line|
data += line
end
return data
end

主要内容:

file.each do |filename|
lunsrvfile = 'server_lun.csv'
ldev = get_file_as_string lunsrvfile
f=File.read(filename)
lunid = f.scan(/^"No.","time","(\h+:\h+:\h+).*/).flatten #it's ok: ex: 00:02:00
if (ldev =~ /#{lunid}/) then
server = ldev.lines.grep(lunid) #--> don't work
#server = %x[grep lunid 'server_lun.csv' |awk -F ";" '{print $1}'] #--> don't work
puts filename
puts lunid
puts server
end
end

server_lun.csv:

server1;00:02:00
server2;00:03:25
server3;00:03:26

感谢您的回答:

是的,我已经测试过了,但是当我把

server = ldev.lines.grep(/#{lunid}/)

列出了所有文件 (lunsrvfile)。

如果匹配我需要第一个值:例如server1

感谢您的回答2:

但有:

server = ldev.grep(/#{lunid}/).first.split(';').first

只打印第一个server1。

输出:

filename1
lunid1
server1

filename2
lunid2
server1
(...)

最佳答案

grep 需要一个 RegExp,您正在向它传递一个字符串。与对 =~ 执行的方式相同,您可以对 grep 命令执行此操作。您也不需要实现 get_file_as_string。顶部的一个衬垫将为您完成。

我想这会做你想做的:

lunsrvfile = 'server_lun.csv'
ldev = File.open(lunsrvfile, "rb").read

file.each do |filename|
f = File.read(filename)
lunid = f.scan(/^"No.","time","(\h+:\h+:\h+).*/).flatten #it's ok: ex: 00:02:00
if (ldev =~ /#{lunid}/) then
server = ldev.lines.grep(/#{lunid}/)
puts filename
puts lunid
puts server
end
end

关于ruby - 从变量中获取元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com