Sorry, I can't do it in 20 lines, but it's very simple.
The class:
class SicCode
def initialize(line)
split_to_columns(line)
end
def split_to_columns(line)
a = line.split(/\s+/)
@sic = a[0]
@descr = a.last(a.length - 1 ).join(" ")
end
def get_sic
@sic
end
def get_descr
@descr
end
def get_sql
puts %Q{IF EXISTS (SELECT * FROM Sic WHERE Code = '#@sic')
BEGIN
UPDATE Sic
SET Descr = '#@descr'
WHERE Code = '#@sic'
END
ELSE
BEGIN
INSERT INTO Sic
SELECT '#@sic', '#@descr', getdate()
END
}
end
end
Input file(small.txt):
3291 ABRASIVE PRODUCTS
6321 ACCIDENT AND HEALTH INSURANCE
8720 ACCOUNTING, AUDITING, & BOOKKEEPING
Run this script:
irb(main):175:0> f = File.new("text.txt", "w")
=> #<File:d:downloads\text.txt>
irb(main):176:0> File.open("small.txt").each {
irb(main):177:1* |line|
irb(main):178:1* s = SicCode.new(line).get_sql
irb(main):179:1> f.puts s
irb(main):180:1> }
IF EXISTS (SELECT * FROM Sic WHERE Code = '3291')
BEGIN
UPDATE Sic
SET Descr = 'ABRASIVE PRODUCTS'
WHERE Code = '3291'
END
ELSE
BEGIN
INSERT INTO Sic
SELECT '3291', 'ABRASIVE PRODUCTS', getdate()
END
IF EXISTS (SELECT * FROM Sic WHERE Code = '6321')
BEGIN
UPDATE Sic
SET Descr = 'ACCIDENT AND HEALTH INSURANCE'
WHERE Code = '6321'
END
ELSE
BEGIN
INSERT INTO Sic
SELECT '6321', 'ACCIDENT AND HEALTH INSURANCE', getdate()
END
IF EXISTS (SELECT * FROM Sic WHERE Code = '8720')
BEGIN
UPDATE Sic
SET Descr = 'ACCOUNTING, AUDITING, & BOOKKEEPING'
WHERE Code = '8720'
END
ELSE
BEGIN
INSERT INTO Sic
SELECT '8720', 'ACCOUNTING, AUDITING, & BOOKKEEPING',
getdate()
END
Output file, text.txt, is empty (0 bytes).