טעינת קובץ csv ברובי

אם יש לכם צורך לייבא מידע מקובץ csv, זה יכול להיות כאב ראש. בייחוד אם עובדים מול אנשי ווינדוז החושבים כי אקסל זה כלי יעיל (בהשוואה לLibreOffice Calc).

רובי מביא עימו כחלק מהספריות הסטנדרטיות שלו, ספרייה בשם csv. למראית עין היא פשוטה מידי ולא תומכת בכלום, אבל למעשה יש בה המון יכולות, אבל צריך לדעת ולהבין כיצד לעבוד עם הספרייה. לדעתי האישית, הAPI שלה בעייתי מעט בגישה שלו, אבל בכל זאת הספרייה שימושית מאוד.

הטעינה הפשוטה ביותר היא כזו:

require 'csv'
CSV.foreach('path/to/file.csv') do |row|
  # use row here...
end

הערך ש row מכיל, הוא מערך של טקסט אשר היה מופרד בפסיקים. אבל במידה והוא אינו מופרד בפסיקים, יש בעיה.
לשם כך, אפשר להוסיף עוד פרמטר שהוא בעצם hash ומאפשר לנו להגדיר את המפריד:

require 'csv'
CSV.foreach('path/to/file.csv', {:col_sep => "\\"}) do |row|
  # use row here...
end

כך למעשה אנחנו אומרים למפרש כי המפריד הוא backslash ולא פסיק.

אם גם אתם עובדים מול אקסל ועברית, ובכן משום מה עבור אקסל, utf-8 זו מילה גסה (לפחות לפי אלו שאני עובד מולם), ואתם מקבלים את הקובץ בקידוד של cp1255. ניתן להתמודד עם הגזירה בצורה הבאה:

require 'csv'
CSV.foreach('path/to/file.csv', {:col_sep => "\\", :encoding => 'cp1255:utf-8' }) do |row|
  # use row here...
end

החלק הראשון בencoding אומר מה הקידוד שהתוכן נמצא בו. הנקודותיים אומרות בעצם "המר" ולאיזה קידוד להמיר.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s