Ruby - разбить строку файла на массив с индексом в имени массива - PullRequest
0 голосов
/ 08 сентября 2018

Это очень специфический вопрос (который, я сомневаюсь, большинство сможет извлечь из него пользу), но я объясню:

У меня есть файл примера, который содержит числа, разделенные запятыми в каждой строке:

1,2,3,4
5,6,7,8
abcdefg
1.3.4

Я хочу иметь возможность разбить файл на строки (это легко сделать):

file = File.open(filename)
file = file.read.split("\n")

А теперь я хочу разбить каждую строку на массив, если он включает в себя «,», и имя или массив должны быть примерно такими: 1array (где 1 - индекс строки файла)

Нечто подобное будет предпочтительнее:

file.each_with_index |c, i| do # c=content, i=index
  if c.include? ","
    instance_array_set("@#{i}array", c.split(","))
  end
end

Я повсюду искал что-либо в концепции массива экземпляров, но, похоже, ничего не могу найти. Я открыт для совершенно разных способов делать то, что я пытаюсь сделать (если это не слишком долго).

Заранее спасибо (надеюсь)

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Создание массива массивов:

result =
  File.readlines('/tmp/input').map do |line|
    values = line.chomp.split(',')
    values if values.size >= 2
  end.compact

result[0][2]
#⇒ "3"
0 голосов
/ 09 сентября 2018

Еще одна версия:

File.readlines(filename).select{ |e| e.split("").include? "," }.map{ |e| e.chomp.split "," }

# => [["1", "2", "3", "4"], ["5", "6", "7", "8"], ["11", "12", "13"]]
0 голосов
/ 08 сентября 2018

Идентификаторы переменных не могут начинаться с цифры, поэтому я перемещаю ее в конец имени

File.open(filename).read.split("\n").each_with_index do |item, index|
  if item.include?(",")
    instance_variable_set("@array#{index}", item.split(","))
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...