Wikipedia каже:
CSV (від англ. Comma Separated Values - значення, розділені комами) - це текстовий формат, призначений для представлення табличних даних. Кожен рядок файлу - це один рядок таблиці. Значення окремих колонок розділяються розділовим символом (delimiter) - кома (,) або крапку з комою (;). Використовуваний символ роздільника залежить від встановленої в системі локалі. У США це кома, а в Росії - крапка з комою, так як кома використовується для дробових чисел (на відміну від США, де це крапка). Значення, що містять зарезервовані символи, такі як: кома, крапка з комою або новий рядок обрамляються символом подвійні лапки ("); якщо у значенні зустрічаються лапки - вони представляються в файлі у вигляді двох лапок поспіль. Рядки розділяються парою символів CR LF (0x0D 0x0A) (в DOS і Windows ця пара генерується натисканням клавіші Enter).
У Ruby 1.9 стандартна бібліотеки CSV була замінена на FasterCSV.
У прикладі я буду використовувати екпортовану у CSV адресну книгу з Nokia PC Suite. Цей скрипт буде виводити доступну інформацію про контакти.
# -*- encoding: utf-8
require 'csv'
filename = 'contacts.csv'
CSV.foreach(filename, :col_sep => ';', :headers => :first_row, :encoding => 'UTF-8') do |row|
puts "==="
row.to_hash.each_pair{|k, v| puts "#{k} => #{v}" if !v.empty?}
end
Опції:
- row_sep - розлілювач полів (по замовчуванню кома)
- col_sep - розділювач рядків (по замовчуванню перехід на новий рядок)
- headers(:first_row означає, що перший рядок трактується, як заголовок)
- encoding - кодування файлу
Щоб подивитись всі доступні опції виконайте в терміналі:
ri CSV::new
2 коментарі:
Було б добре ще провірити на швидкодію дану задачу.
Та порівняти швидкість з такими лібами як FasterCsv та CCSV (про ccsv я вже писав на хабрі)
Так FasterCSV і використовується в Ruby 1.9 по замовчуванню. Навіть нема що порівнювати. FasterCSV відчутно програє у швидкодії Ccsv. І мені таки не вдалось скомпілювати останній для Ruby 1.9.x.
Дописати коментар