Существует ли более короткий способ потребовать файла в том же каталоге в рубине?

В вашем цикле вы можете использовать isspace, чтобы проверить, является ли элемент только пробелами (или даже символами табуляции и переносами), прежде чем обновлять его в Excel:

# This will fill rows 1 and 3 but you can change that as per your use case
count = 0
for data in Sample_list:
    if not data or data.isspace():
        continue
    Sheet.cell(row = 1 if count % 2 == 0 else 3, column = col).value = data
    col+=count % 2 # Column only increments when count is odd
    count+=1

ИЛИ вы можете удалить все пробелы из списка заранее:

Sample_list = [elem for elem in Sample_list if not elem.isspace()]
56
задан Jonathan Allard 30 April 2012 в 23:39
поделиться

3 ответа

Просто требуется имя файла .

Да, он будет импортирован дважды, если вы укажете имя файла и ./ имя файла , так что не делай этого. Вы не указываете .rb , поэтому не указывайте путь. Я обычно помещаю большую часть своей логики приложения в файл в lib , а затем у меня есть скрипт в bin , который выглядит примерно так:

#!/usr/bin/env ruby

$: << File.join(File.dirname(__FILE__), "/../lib")
require 'app.rb'
App.new.run(ARGV)

Еще одним преимуществом является то, что я нахожу его проще выполнить модульное тестирование, если загрузка логики приложения не запускается автоматически.

12
ответ дан 26 November 2019 в 17:19
поделиться

Вышеописанное будет работать, даже если вы запускаете скрипт из какого-то другого каталога. Тем не менее, внутри того же каталога более короткие формы, на которые вы ссылаетесь, работают так, как ожидается, и, по крайней мере, для ruby ​​1.9 не приведут к двойному требованию.

testa.rb

puts "start test A"
require 'testb'
require './testb'
puts "finish test A"

testb.rb

puts "start test B"
puts "finish test B"

выполняется 'ruby testa .rb 'приведет к:

start test A
start test B
finish test B
finish test A

Однако более длинная форма будет работать даже из другого каталога (например, ruby ​​somedir / script.rb)

3
ответ дан 26 November 2019 в 17:19
поделиться

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

# push-loadpath.rb
if caller.first
  $: << File.expand_path(File.dirname(caller.first))
end

Тогда это должно работать

% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
load 'push-loadpath.rb'
require 'lib1'
require 'lib2'
#...

вызывающий дает вам доступ к текущему стеку вызовов и сообщает, какой файл и где, поэтому push-loadpath.rb использует его для добавления файла, который загружает его в loadpath.

Обратите внимание, что вы должны загрузить файл, а не требовать его, чтобы тело могло быть вызвано несколько раз (по одному разу для каждого, когда вы хотите изменить путь загрузки).

С другой стороны, вы можете обернуть тело методом,

# push-loadpath.rb
def push_loadpath
  $: << File.expand_path(File.dirname(caller.first))
end

Это позволит вам потребовать его и использовать его следующим образом:

% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
require 'push-loadpath'
push_loadpath
require 'lib1'
require 'lib2'
#...
3
ответ дан 26 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: