On Thu, Jun 26, 2008 at 12:57 PM,  <robnewnham / gmail.com> wrote:
> I have come code which is looking for a particular number within a CSV
> row (item no 2).  If it finds it, I want it to output the row
> unchanged - but if it isn't there, I want it to delete the row
> entirely.
>
> I can't get the following code to work - can anyone spot my mistakes?
>
> reequire "csv"
> def basketExtract
>   f = File.open('DATA.DAT')
>   csvr = CSV::Reader.create(f,'|')
>   # import CSV file and read it.
>
>   header = csvr.shift
>   #removes header character
>   outfile = File.new('NEWDATA.DAT','w')
>   CSV::Writer.create(outfile, '|') << header
>
>    csvr.each do |csv|
>     # read each row in the CSV
>        if csv[1] == 699 #if the branch number is one of the requested
> ones.

I think the entries are strings, so this comparison will never be true.
Try

   if csv[1] == "699"

>              outrow = csv
>       else #if it isn't one in the list
>          next
>       end
>     CSV::Writer.create(outfile, '|') << outrow
>    end
>  end
>
>

On the other hand, I would use fastercsv and do something like:

require 'fastercsv'

FasterCSV.open("new.csv", "w") do |out|
	FasterCSV.foreach("test.csv", {:headers => true, :return_headers =>
true, :col_sep => '|'}) do |row|
		out << row if (row.header_row? || row[1] == "699")
	end
end

Hope this helps,

Jesus.