我想获取一个文件,将文件读入我的程序并将其拆分为字符,将生成的字符数组拆分为每个5,000个字符的多维数组,然后将每个单独的数组写入同一位置的文件中。
我拿了一个文件,读了它,然后创建了多维数组。现在我想将每个单独的维度数组写入单独的文件中。
该文件是通过用户输入获得的。然后我创建了一个链式辅助方法,将文件存储到第一个mixin中的数组中,然后将其传递给另一个方法,将其分解为多维数组,最后将其移交到当前设置的链的末尾创建一个我将放置这些文件的新目录。
require 'Benchmark/ips'
file = "C:\\test.php"
class String
def file_to_array
file = self
return_file = File.open(file) do |line|
line.each_char.to_a
end
return return_file
end
def file_write
file_to_write = self
if Dir.exist?("I:\\file_to_array")
File.open("I:/file_to_array/tmp.txt", "w") { |file| file.write(file_to_write) }
read_file = File.read("I:/file_to_array/tmp.txt")
else
Dir.mkdir("I:\\file_to_array")
end
end
end
class Array
def file_divider
file_to_divide = self
file_to_separate = []
count = 0
while count != file_to_divide.length
separator = count % 5000
if separator == 0
start = count - 5000
stop = count
file_to_separate << file_to_divide[start..stop]
end
count = count + 1
end
return file_to_separate
end
def file_write
file_to_write = self
if Dir.exist?("I:\\file_to_array")
File.open("I:/file_to_array/tmp.txt", "w") { |file| file.write(file_to_write) }
else
Dir.mkdir("I:\\file_to_array")
end
end
end
Benchmark.ips do |result|
result.report { file.file_to_array.file_divider.file_write }
end
test.php的
<?php
echo "hello world"
?>
答案 0 :(得分:1)
这个未经测试的代码是我开始将文本分成块并保存的地方:
str = "I want to take a file"
str_array = str.scan(/.{1,10}/) # => ["I want to ", "take a fil", "e"]
str_array.each.with_index(1) do |str_chunk, i|
File.write("output#{i}", str_chunk)
end
这不符合词边界。
阅读单独的输入文件很简单;如果您知道输入永远不会超过可用内存并且您不关心性能,则可以使用read
。
进一步思考,如果你想读取一个文本文件并将其内容分解成更小的文件,那么请以块的形式阅读:
input = File.open('input.txt', 'r')
i = 1
until input.eof? do
chunk = input.read(10)
File.write("output#{i}", chunk)
i += 1
end
input.close
甚至更好,因为它会自动关闭输入:
File.open('input.txt', 'r') do |input|
i = 1
until input.eof? do
chunk = File.read(10)
File.write("output#{i}", chunk)
i += 1
end
end
那些没有经过测试,但它看起来是正确的。
答案 1 :(得分:0)
使用标准File API和Serialisation。
File.write('path/to/yourfile.txt', Marshal.dump([1, 2, 3]))