/ / Ruby print line номера [дубликат] - рубин, линия, бяло пространство

Ruby линии за печат линия [дубликат] - рубин, линия, бели полета

Опитвам се да проверя файл за линия по линиязапочва бяло пространство. Искам всички линии да започнат с пространство или раздел, не и двете. Ако има линия, която започва с интервал от пространство и прашници, започвайки от раздела във файла, кодът по-долу ще отпечата предупреждение, но наред с това искам да отпечатам 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 за отговор № 1

Ruby има редица специални променливи, една от които е $. който е номерът на четената линия.

Можете да използвате и 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