gpt4 book ai didi

ruby - Ruby 中的拆分文件

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

我的应用程序中有一个方法可以将一个文件拆分成许多较小的文件。

该方法打开一个表格分隔文件,对于文件中的每一行,它将行中的第一个值添加到它创建的文件中,该文件以该行中的值命名。例如,在具有以下值的行中:

亚特兰大波士顿 354 守门员

它会将值“Atlanta”添加到名为“Boston.csv”的文件中。

def split_file(file)    
File.open(file.decompressed_file_path, 'rb').each { |line|
row_values = line.split("\t")

file_name = build_file_name(file,row_values)
file_path = build_file_path(file_name)

open(file_path, "a+") { |f| f << row_values[0] + "\n" }
}
end



def build_file_path(name)
File.join(file.directory,name)
end


def build_file_name(file,row_values)
"#{row_values[file.hometown_index]}.csv"
end

我的问题是,是否有更有效的方法来完成此操作?一种更具体的更快方法,或者这只是一项乏味的任务。

最佳答案

是否有更有效的方法来完成您的任务取决于您所说的“有效”是什么意思以及您以何种方式重用您的代码。显然,计算复杂性不是这里的问题,因此您必须询问人体工程学效率。你写的代码已经足够好了。

但是如果你想把它从好重构到好,你会被邀请更彻底地使用面向对象的技术。例如,您将编写一个对象 RowValues:

class RowValues < Array
def self.of line
new line.split "\t"
end

def build_file_name file
"#{self[file.hometown_index]}.csv"
end

def write file_path
open( file_path, "a+" ) { |f| f << self[0] + "\n" }
end
end

def split_file file
File.open(file.decompressed_file_path, 'rb').each { |line|
row_values = RowValues.of line
file_name = row_values.build_file_name file
file_path = build_file_path file_name
row_values.write file_path
}
end

您可以沿着这些方向继续重构,例如使 #split_file 成为文件对象的实例方法,因此您可以调用 而不是 split_file( file ) >file.split。我不完全理解您的代码,例如,在您的 #build_file_path 方法中,您使用了未在代码中声明的 file 变量(或方法)。无论如何,我建议您观看 Ben Orenstein 的讲座,Refactoring from good to great .

关于ruby - Ruby 中的拆分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760483/

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