Update a particular Field in a csv file

A

Antony Nambikkai

Hi Friends,

I am having a role.csv file as like

emp_id,dep_id,role,salary,accepted
1,1,SSE,10000,YES
2,2,SSE,11000,NO
3,1,SSE,9000,YES
4,2,SSE,12000,YES
5,1,SSE,8000,NO

Now, I need to update this role.csv file as like below

emp_id,dep_id,role,salary,accepted
1,1,SSE,10000,NO
2,2,SSE,11000,YES
3,1,SSE,9000,NO
4,2,SSE,12000,YES
5,1,SSE,8000,NO

I tried with FasterCSV and CSV class none of them provide a full access
mode to edit this CSV file.

I have a sample code but thats not looking very effective (but working
fine)

Note : CSV file is a sample one (Don't think Logic in that)

def update_csv_report( emp_id, dep_id, is_accepted )
new_rows = Array.new
CSV.open('role.csv', 'r') do |row|
if (row[0] == emp_id && row[1] == dep_id)
new_rows << [row[0], row[1], row[2], row[3], is_accepted]
else
new_rows << [row[0], row[1], row[2], row[3], row[4]]
end
end

CSV.open('role.csv', 'w') do |writer|
new_rows.each do |row|
writer << row
end
end
end

I am facing 2 issues in this

1. For every updating the CSV file, I am rewriting the whole CSV file.
That not a teddy way to do it.
2. I am opening the file first time for reading and 2nd time for
writing. That is also not convincing me.

Please help me in this. How to Improve this code. Main motive is to
updated a particular field instead of rewriting the whole CSV file.

Cheers,
Antony Prabhu N.
 
C

Charles Calvert

Probably too late to help the OP, but in case anyone finds this in an
archive ...

Hi Friends,

I am having a role.csv file as like

emp_id,dep_id,role,salary,accepted
1,1,SSE,10000,YES
2,2,SSE,11000,NO
3,1,SSE,9000,YES
4,2,SSE,12000,YES
5,1,SSE,8000,NO

Now, I need to update this role.csv file as like below

emp_id,dep_id,role,salary,accepted
1,1,SSE,10000,NO
2,2,SSE,11000,YES
3,1,SSE,9000,NO
4,2,SSE,12000,YES
5,1,SSE,8000,NO

[snip code]
I am facing 2 issues in this

1. For every updating the CSV file, I am rewriting the whole CSV file.
That not a teddy way to do it.
2. I am opening the file first time for reading and 2nd time for
writing. That is also not convincing me.

The problem is that you're dealing with a single file, not a database.
In order to alter the contents of that file, you're going to have to
read the entire thing into memory, alter it, and then write it back
out to disk. That's just the way it works.

You could always move the data into a database, which would allow you
to update only an individual record.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top