require 'rubygems'
require 'roo'
require 'fileutils'
require 'rio'
FileUtils.mkdir_p "/Users/pshapiro/Desktop/Excel/xls"
FileUtils.mkdir_p "/Users/pshapiro/Desktop/Excel/tmp"
FileUtils.mkdir_p "/Users/pshapiro/Desktop/Excel/csv"
@filesxls = Dir["/Users/pshapiro/Desktop/Excel/*.xls"]
for file in @filesxls
FileUtils.move(file,"/Users/pshapiro/Desktop/Excel/xls")
end
@filesxls = Dir["/Users/pshapiro/Desktop/Excel/xls/*.xls"]
@filetmp = Dir["/Users/pshapiro/Desktop/Excel/xls/*.xls_tmp"]
for file in @filesxls
convert = Excel.new(file)
convert.default_sheet = convert.sheets[0]
convert.to_csv(file+"_tmp")
end
@filestmp = Dir["/Users/pshapiro/Desktop/Excel/xls/*.xls_tmp"]
for file in @filestmp
FileUtils.move(file,"/Users/pshapiro/Desktop/Excel/tmp")
end
dir = "/Users/pshapiro/Desktop/Excel/tmp/"
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + File.basename(f, '.*')
File.rename(oldFile, newFile)
end
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + f + ".csv"
File.rename(oldFile, newFile)
end
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/tmp/*.csv"]
for file in @filescsv
FileUtils.move(file,"/Users/pshapiro/Desktop/Excel/csv")
end
FileUtils.rm_rf("/Users/pshapiro/Desktop/Excel/tmp")
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/csv/*.csv"]
for file in @filescsv
5.times {
text=""
File.open(file,"r"){|f|f.gets;text=f.read}
File.open(file,"w+"){|f| f.write(text)}
}
end
rio("/Users/pshapiro/Desktop/Excel/csv/Attention.csv").csv.skipcolumns(1..2)
> rio('/Users/pshapiro/Desktop/Excel/csv/Attention_Fixed.csv').csv(',')
Thanks!
--
Posted via http://www.ruby-forum.com/.
> I have been struggling for days on just the first part of this script.
> Please help! I need to add the ability to delete the last column of
> each
> csv, which vary in their lengths.
I'm not familiar with rio, but the process using most CSV parsers
would be:
* Write a loop that reads and writes CSV (copies it effectively)
* Instead of writing the whole row, just write all the fields but the
last one with something like: row[0..-2]
I hope that helps.
James Edward Gray II
THANK YOU SO MUCH!!!
require 'rubygems'
require 'roo'
require 'csv'
require 'fileutils'
require 'rio'
require 'fastercsv'
@filestmp = Dir["/Users/pshapiro/Desktop/Excel/xls/*.xls_tmp"]
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/tmp/*.csv"]
FileUtils.rm_rf("/Users/pshapiro/Desktop/Excel/tmp")
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/csv/*.csv"]
dir = "/Users/pshapiro/Desktop/Excel/csv/"
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + File.basename(f, '.*') + ".tmp"
File.rename(oldFile, newFile)
end
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/csv/*.tmp"]
for file in @filescsv
csv = FasterCSV.read(file, :headers => true)
lastc = csv.headers.length-1
puts lastc
rio(file).csv.skipcolumns(1..2,lastc) > rio(file+".csv").csv(',')
end
@filescsv = Dir["/Users/pshapiro/Desktop/Excel/csv/*.tmp"]
for file in @filescsv
FileUtils.remove(file)
end
dir = "/Users/pshapiro/Desktop/Excel/csv"
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + File.basename(f, '.*')
File.rename(oldFile, newFile)
end
2.times {
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + File.basename(f, '.*')
File.rename(oldFile, newFile)
end
}
files = Dir.entries(dir)
files.each do |f|
next if f == "." or f == ".."
oldFile = dir + "/" + f
newFile = dir + "/" + f + ".csv"
File.rename(oldFile, newFile)
end