Help Handling CSV Columns

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.

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!

On Jun 14, 2009, at 6:31 PM, Paul Shapiro wrote:

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 G. II

James G. wrote:

On Jun 14, 2009, at 6:31 PM, Paul Shapiro wrote:

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 G. II

THANK YOU SO MUCH!!!

require ‘rubygems’
require ‘roo’
require ‘csv’
require ‘fileutils’
require ‘rio’
require ‘fastercsv’

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

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