Опитвам се да проверя файл за линия по линиязапочва бяло пространство. Искам всички линии да започнат с пространство или раздел, не и двете. Ако има линия, която започва с интервал от пространство и прашници, започвайки от раздела във файла, кодът по-долу ще отпечата предупреждение, но наред с това искам да отпечатам 2 линии, които започват с интервал и който започва с таб, само за да покаже на потребителя, и Im остана на това как да получите номера на линията и неща. Помогне!! Кодът ми изглежда така.
file= File.read("file_tobe_checked")
tabs = spaces = false
file.each do |line|
line =~ /^t/ and tabs = true
line =~ /^ / and spaces = true
if spaces and tabs
STDERR << "The white spaces at the beginning of each line are not consistent.n"
end
end
Отговори:
0 за отговор № 1Ruby има редица специални променливи, една от които е $.
който е номерът на четената линия.
Можете да използвате и IO lineno
метод.
IO.lineno
(from ruby core)
------------------------------------------------------------------------------
ios.lineno -> integer
------------------------------------------------------------------------------
Returns the current line number in ios. The stream must be opened for
reading. lineno counts the number of times #gets is called rather than the
number of newlines encountered. The two values will differ if #gets is called
with a separator other than newline.
Methods that use $/ like #each, #lines and #readline will also increment
lineno.
See also the $. variable.
f = File.new("testfile")
f.lineno #=> 0
f.gets #=> "This is line onen"
f.lineno #=> 1
f.gets #=> "This is line twon"
f.lineno #=> 2
0 за отговор № 2
Можете да запазите първия номер на ред, който започва с всеки от тях като своя предикат, ако има такъв ред:
file= File.read("file_tobe_checked")
tabs = spaces = nil
line_no = 1
file.each do |line|
tabs ||= line_no if line =~ /^t/
spaces ||= line_no if line =~ /^ /
line_no += 1
if spaces && tabs
STDERR << "The white spaces at the beginning of each line are not consistent.n"
STDERR << "Tab line: #{tabs}"
STDERR << "Space line: #{spaces}"
end
end