این کلاس یک رابط کامل برای پرونده ها و داده های CSV ارائه می دهد. این ابزارهایی را برای شما فراهم می کند تا در صورت لزوم به خواندن و نوشتن آن از رشته ها یا اشیاء IO بپردازید.
عمومی ترین رابط کتابخانه:
CSV = CSV.جدید(String_or_io, **گزینه ها) # خواندن: شیء IO باید برای خواندن باز باشد CSV.خواندن # =>آرایه ای از ردیف ها # یا CSV.هر یک do |ردیف| # . پایان # یا ردیف = CSV.تغییر مکان # نوشتن: شیء IO باید برای نوشتن باز باشد CSV ردیف
چندین روش کلاس تخصصی برای خواندن یا نوشتن یک ایستگاه وجود دارد که در بخش روشهای تخصصی شرح داده شده است.
اگر یک رشته به :: جدید منتقل شود ، داخل آن به یک شیء Stringio پیچیده می شود.
از گزینه ها می توان برای مشخص کردن طعم خاص CSV (جداکننده های ستون ، جداکننده های ردیف ، نقل قول و غیره) استفاده کرد و برای تبدیل داده ها ، به بخش تبدیل داده ها برای توضیحات دوم مراجعه کنید.
روشهای تخصصی ¶
خواندن ¶
# از یک پرونده: همه به یکباره arr_of_rows = CSV.خواندن("مسیر/به/file. csv", **گزینه ها) # سبک تکراری: CSV.برای هر("مسیر/به/file. csv", **گزینه ها) do |ردیف| # . پایان # از یک رشته arr_of_rows = CSV.تجزیه کردن("CSV ، Data ، String", **گزینه ها) # یا CSV.تجزیه کردن("CSV ، Data ، String", **گزینه ها) do |ردیف| # . پایان نوشتن ¶
# به یک پرونده CSV.باز کن("مسیر/به/file. csv", "WB") do |CSV| CSV ["ردیف", "از", "CSV", "داده ها"] CSV ["یکی دیگر", "ردیف"] # . پایان # به یک رشته csv_string = CSV.تولید می کنند do |CSV| CSV ["ردیف", "از", "CSV", "داده ها"] CSV ["یکی دیگر", "ردیف"] # . پایان میانبرها ¶
# برنامه افزودنی اصلی برای تبدیل یک خط csv_string = ["CSV", "داده ها"].to_csv # به CSV csv_array = "CSV ، رشته".parse_csv # از CSV # روش CSV () CSV <|csv_out| csv_out %w> # به $ stdout CSV(CSV = "") <|CSV_STR| CSV_STR %w> # به یک رشته CSV($ stderr) <|csv_err| csv_err %w> # به $ stderr CSV($ stdin) <|csv_in| csv_in.هر یک <|ردیف| p ردیف>> # از $ stdin
تبدیل داده ¶
CSV با هدر ¶
CSV اجازه می دهد تا نام ستون پرونده CSV را ، چه در داده ها ، یا به طور جداگانه ارائه می دهد. اگر هدرهای مشخص شده ، روشهای خواندن نمونه ای از جدول CSV :: را شامل می شود ، متشکل از CSV :: Row.
# هدرها بخشی از داده ها هستند داده ها = CSV.تجزیه کردن(, هدرها: درست است، واقعی) نام ، بخش ، باب حقوق ، مهندسی ، 1000 جین ، فروش ، 2000 جان ، مدیریت ، 5000 ردیف داده ها.طبقه #=>CSV :: جدول داده ها.اولین #=> # داده ها.اولین.to_h #=> "Bob", "Department"=>"Engineering", "Salary"=>"1000"> # هدرهای ارائه شده توسط توسعه دهنده داده ها = CSV.تجزیه کردن("باب ، مهاربندی ، 1000", هدرها: ٪ من [نام بخش حقوق]) داده ها.اولین #=> #خواندن داده های تایپ شده ¶
CSV اجازه می دهد مجموعه ای از مبدل های داده را به عنوان مثال ارائه دهد. تحولات برای امتحان کردن بر روی داده های ورودی. مبدل می تواند نمادی از CSV :: کلیدهای ثابت Converters یا Lambda باشد.
# بدون هیچ مبدل: CSV.تجزیه کردن("باب ، 2018-03-01،100") #=>["باب" ، "2018-03-01" ، "100"] # با مبدل های داخلی: CSV.تجزیه کردن("باب ، 2018-03-01،100", مبدل ها: ٪ من [تاریخ عددی]) #=>[["باب" ، #، 100]] # با مبدل های سفارشی: CSV.تجزیه کردن("باب ، 2018-03-01،100", مبدل ها: [>(v) <زمان.تجزیه کردن(v) نجات v>]) #=>[["باب" ، 2018-03-01 00:00:00 +0200 ، "100"] رمزگذاری CSV و شخصیت (M17N یا چند زبانه سازی) ¶
این تجزیه کننده CSV جدید M17N زرنگ است. تجزیه کننده در رمزگذاری IO یا شیء رشته ای که از آن خوانده شده یا نوشته شده است کار می کند. داده های شما هرگز به صورت رمزگذاری نشده (مگر اینکه از روبی بخواهید آن را برای شما رمزگذاری کند) و به معنای واقعی کلمه در رمزگذاری موجود در آن تجزیه می شود. بنابراین CSV آرایه ها یا ردیف های رشته های را در رمزگذاری داده های شما باز می گرداند. این کار با رمزگذاری خود تجزیه کننده در رمزگذاری شما انجام می شود.
البته برخی از رمزگذاری باید برای انجام این پشتیبانی چند جانبه انجام شود. به عنوان مثال ،: col_sep ،: row_sep ، و: quote_char باید برای مطابقت با داده های شما از کدگذاری استفاده شود. امیدوارم این امر باعث شود کل فرایند شفاف باشد ، زیرا پیش فرض های CSV فقط باید جادویی برای داده های شما کار کنند. با این حال ، شما می توانید این مقادیر را به صورت دستی در رمزگذاری هدف تنظیم کنید تا از ترجمه جلوگیری کنید.
توجه به این نکته نیز حائز اهمیت است که در حالی که همه تجزیه کننده اصلی CSV اکنون در حال رمزگذاری Agnostic است ، برخی از ویژگی ها اینگونه نیستند. به عنوان مثال ، مبدل های داخلی سعی می کنند قبل از انجام تبدیل ، داده ها را به UTF-8 تبدیل کنند. باز هم ، می توانید مبدل های سفارشی را که از رمزگذاری های شما آگاه هستند ، برای جلوگیری از این ترجمه ارائه دهید. حمایت از تبدیل های بومی در همه رمزگذاری های روبی برای من خیلی سخت است.
به هر حال ، جنبه عملی این ساده است: اطمینان حاصل کنید که IO و اشیاء رشته ای که به CSV منتقل می شوند دارای مجموعه رمزگذاری مناسب هستند و همه چیز فقط باید کار کند. روشهای CSV که به شما امکان می دهد اشیاء IO را باز کنید (CSV :: foreach () ، csv :: باز () ، csv :: read () ، و csv :: readlines ()) به شما امکان می دهد رمزگذاری را مشخص کنید.
یک استثناء جزئی هنگام تولید CSV در یک رشته با رمزگذاری که ASCII سازگار نیست ، ایجاد می شود. هیچ داده موجود برای استفاده از CSV برای تهیه خود وجود ندارد و بنابراین احتمالاً نیاز به رمزگذاری مورد نظر برای بیشتر این موارد دارید. سعی خواهد کرد با استفاده از CSV :: generate_line () یا array#to_csv () ، با استفاده از قسمتهای موجود در یک ردیف خروجی حدس بزنیم.
من سعی می کنم به هر مسئله رمزگذاری دیگر در مستندات روشها اشاره کنم.
این با تمام رمزگذاری های غیر "ساختگی" کشتی های یاقوت با تمام توانایی های من آزمایش شده است. با این حال ، این کد جدید شجاع است و ممکن است اشکالات داشته باشد. لطفا در صورت تمایل به گزارش هر مشکلی که با آن پیدا کرده اید گزارش دهید.
ثابت
رمزگذاری مورد استفاده همه مبدل ها.
این هش مبدل های داخلی CSV را که با نام قابل دسترسی است ، نگه می دارد. می توانید مبدل ها را با csv. convert () یا از طریق گزینه های منتقل شده به CSV :: جدید () انتخاب کنید.
: عدد صحیح
تبدیل هر یک از عدد صحیح () می پذیرد.
:شناور
هر شناور میدانی () را می پذیرد.
: عددی
ترکیبی از: عدد صحیح و: شناور.
:تاریخ
هر تاریخ میدانی را تبدیل می کند :: پارس () قبول می کند.
:زمان قرار
تبدیل هر قسمت DateTime :: پارس () قبول می کند.
:همه
همه مبدل های داخلی. ترکیبی از: date_time و: عددی.
قبل از تلاش برای تبدیل ، تمام مبدل های داخلی مبدل های داخلی Transcode به UTF-8 داده می شوند. اگر داده های شما به UTF-8 رمزگذاری نشود ، تبدیل شکست می خورد و این زمینه بدون تغییر باقی می ماند.
این هش به طور عمدی ناامید شده است و کاربران باید احساس راحتی کنند که مقادیری را به آن اضافه کنند که توسط همه اشیاء CSV قابل دسترسی باشد.
برای افزودن یک قسمت دسته کوچک موسیقی جاز ، مقدار باید مجموعه ای از نام ها باشد. مزارع دسته کوچک موسیقی جاز را می توان با سایر زمینه های دسته کوچک موسیقی جاز لانه کرد.
گزینه های استفاده شده در هنگام عدم استفاده از کد با کد فراخوانی ارائه می شود. آن ها هستند:
: col_sep
: row_sep
: quote_char
: field_size_limit
: مبدل ها
: unvorted_fields
: هدرها
: Retu_headers
: header_converters
: skip_blanks
: force_quotes
: skip_lines
: liberal_parsing
: quote_empty
regexp برای یافتن و تبدیل برخی از قالب های تاریخ مشترک استفاده می شود.
regexp برای یافتن و تبدیل برخی از قالب های متداول DateTime استفاده می شود.
یک ساختار FieldInfo شامل جزئیات مربوط به موقعیت یک قسمت در منبع داده ای است که از آن خوانده شده است. CSV این ساختار را به برخی از بلوک هایی که بر اساس ساختار میدانی تصمیم می گیرند منتقل می کند. برای مثال به csv. convert_fields () مراجعه کنید.
فهرست مطالب
شاخص صفر مبتنی بر این زمینه در ردیف خود.
خط
خط منبع داده این ردیف از آن است.
سرتیتر
هدر ستون ، در صورت وجود.
این هش مبدل های داخلی CSV را که با نام قابل دسترسی است ، نگه می دارد. شما می توانید headerConverters را با csv. header_convert () یا از طریق گزینه های منتقل شده به CSV :: جدید () انتخاب کنید.
:
downcase () را روی رشته هدر فراخوانی می کند.
:سمبل
فضاهای پیشرو/دنباله دار ریخته می شود ، رشته ها پایین می آیند ، فضاهای باقیمانده با زیرپوش ها جایگزین می شوند ، شخصیت های غیر کلمه ای از بین می روند و در نهایت to_sym () خوانده می شوند.
قبل از تلاش برای تبدیل ، تمام مبدل های هدر داخلی داده های Transcode به UTF-8 داده می شوند. اگر داده های شما به UTF-8 رمزگذاری نشود ، تبدیل خراب می شود و هدر بدون تغییر باقی می ماند.
این هش به طور عمدی ناامید شده است و کاربران باید احساس راحتی کنند که مقادیری را به آن اضافه کنند که توسط همه اشیاء CSV قابل دسترسی باشد.
برای افزودن یک قسمت دسته کوچک موسیقی جاز ، مقدار باید مجموعه ای از نام ها باشد. مزارع دسته کوچک موسیقی جاز را می توان با سایر زمینه های دسته کوچک موسیقی جاز لانه کرد.
نسخه کتابخانه نصب شده.
ویژگی های
رمزگذاری [r]
رمزگذاری CSV در حال تجزیه و یا نوشتن است. این رمزگذاری است که داده های تجزیه شده را در آن دریافت می کنید و/یا داده های رمزگذاری در آن نوشته می شود.
روشهای کلاس عمومی
فیلتر (** گزینه ها)<|row| .>برای تغییر منبع کلیک کنید فیلتر (ورودی ، ** گزینه ها)<|row| .> فیلتر (ورودی ، خروجی ، ** گزینه ها)<|row| .>
این روش راحتی برای ساخت فیلترهای شبیه یونیکس برای داده های CSV است. هر ردیف به بلوک ارائه شده ارائه می شود که می تواند در صورت لزوم آن را تغییر دهد. پس از بازگشت بلوک ، ردیف به خروجی تغییر یافته یا خیر.
آرگومان های ورودی و خروجی می توانند هر چیزی باشد که CSV :: جدید () قبول می کند (به طور کلی رشته یا اشیاء IO). در صورت عدم ارائه ، آنها به طور پیش فرض به argf و $ stdout.
پارامتر گزینه ها همچنین پس از تجزیه و تحلیل کلید هوشمندانه به CSV :: جدید () فیلتر می شود. هر شروع کلید با: IN_ یا: input_ این شناسه پیشرو را محروم می کند و فقط در گزینه های گزینه برای شیء ورودی استفاده می شود. کلیدها با شروع: out_ یا: output_ فقط بر روی خروجی تأثیر می گذارند. تمام کلیدهای دیگر به هر دو شیء اختصاص داده می شوند.
گزینه: output_row_sep به طور پیش فرض به $ input_record_separator ($/).
# پرونده csv. rb ، خط 468 دنباله خود.فیلتر کردن(ورودی=نیل, خروجی=نیل, **گزینه ها) # گزینه های ورودی ، خروجی یا هر دو را تجزیه کنید in_options, out_options = هش.جدید، row_sep: $ input_record_separator> گزینه ها.هر یک do |کلید, ارزش| مورد کلید.to_s چه زمانی /ain(؟:put)؟_(.+) z/ in_options[$1.to_sym] = ارزش چه زمانی /aout(؟:put)؟_(.+) z/ out_options[$1.to_sym] = ارزش دیگر in_options[کلید] = ارزش out_options[کلید] = ارزش پایان پایان # ساخت بسته های ورودی و خروجی ورودی = جدید(ورودی || vergf, in_options) خروجی = جدید(خروجی || $ stdout, out_options) # بخوانید ، بازده ، بنویسید ورودی.هر یک do |ردیف| بازده ردیف خروجی ردیف پایان پایان
foreach (مسیر ، ** گزینه ها ، و بلوک) برای تغییر منبع کلیک کنید
این روش به عنوان رابط اصلی برای خواندن پرونده های CSV در نظر گرفته شده است. شما یک مسیر و هر گزینه ای را که می خواهید برای خواندن تنظیم کنید عبور می کنید. هر ردیف پرونده به نوبه خود به بلوک ارائه شده منتقل می شود.
پارامتر گزینه ها می تواند هر چیزی باشد که CSV :: جدید () درک می کند. این روش همچنین یک پارامتر اضافی را درک می کند: رمزگذاری پارامتر که می توانید برای مشخص کردن رمزگذاری داده های موجود در پرونده مورد نظر استفاده کنید. شما باید این را ارائه دهید مگر اینکه داده های شما در رمزگذاری باشد :: Default_Exteal (). CSV از این استفاده می کند تا نحوه تجزیه داده ها را تعیین کند. شما ممکن است رمزگذاری دوم را تهیه کنید تا داده ها به عنوان خوانده شده از کدگذاری شده استفاده کنید. به عنوان مثال ، رمزگذاری: "UTF-32BE: UTF-8" داده های UTF-32BE را از پرونده می خواند اما قبل از CSV آن را به UTF-8 تبدیل می کند.
# پرونده csv. rb ، خط 507 دنباله خود.برای هر(مسیر, **گزینه ها, &مسدود کردن) برگشت به_نوم(__روش__, مسیر, گزینه ها) مگر اینکه block_given؟ باز کن(مسیر, گزینه ها) do |CSV| CSV.هر یک(&مسدود کردن) پایان پایان
تولید (STR ، ** گزینه ها)<|csv| .>برای تغییر منبع کلیک کنید تولید (** گزینه ها)<|csv| .>
این روش رشته ای را که ارائه می دهید یا یک رشته پیش فرض خالی در یک شی CSV که به بلوک ارائه شده منتقل می شود ، می پیچد. شما می توانید از بلوک برای ضمیمه ردیف های CSV به رشته استفاده کنید و وقتی بلوک از بین می رود ، رشته نهایی بازگردانده می شود.
توجه داشته باشید که یک رشته منتقل شده با این روش اصلاح شده است. در صورت نیاز به رشته جدید ، قبل از عبور با DUP () تماس بگیرید.
پارامتر گزینه ها می تواند هر چیزی باشد که CSV :: جدید () درک می کند. این روش یک اضافی را درک می کند: رمزگذاری پارامتر هنگام عبور از رشته ای برای تنظیم رمزگذاری پایه برای خروجی. اگر قصد دارید داده های سازگار با ASCII را تولید کنید ، CSV به این نکته نیاز دارد.
# پرونده csv. rb ، خط 532 دنباله خود.تولید می کنند(str=نیل, **گزینه ها) # اگر هیچکدام از آنها داده نشده است ، یک رشته خالی پیش فرض اضافه کنید if str str = رفیق.جدید(str) str.دنبال کردن(0, IO::به دنبال_) دیگر رمز = گزینه ها[: رمزگذاری] str = +"" str.Force_encoding(رمز) if رمز پایان CSV = جدید(str, گزینه ها) # بسته بندی کردن بازده CSV # عملکرد برای ضمیمه CSV.رشته # رشته نهایی بازگشت پایان
generate_line (ردیف ، ** گزینه ها) برای جابجایی منبع کلیک کنید
این روش میانبر برای تبدیل یک ردیف واحد (آرایه) به یک رشته CSV است.
پارامتر گزینه ها می تواند هر چیزی باشد که CSV :: جدید () درک می کند. این روش یک اضافی را درک می کند: رمزگذاری پارامتر برای تنظیم رمزگذاری پایه برای خروجی. این روش سعی خواهد کرد که در صورت امکان رمزگذاری خود را از اولین قسمت غیر صفر در ردیف حدس بزنید ، اما ممکن است لازم باشد از این پارامتر به عنوان یک برنامه پشتیبان استفاده کنید.
گزینه: row_sep به طور پیش فرض به $ input_record_separator ($/) هنگام فراخوانی این روش.
# پرونده csv. rb ، خط 560 دنباله خود.تولید_(ردیف, **گزینه ها) گزینه ها= row_sep: $ input_record_separator>.ادغام(گزینه ها) str = +"" if گزینه ها[: رمزگذاری] str.Force_encoding(گزینه ها[: رمزگذاری]) السیف رشته = ردیف.پیدا کردن |f| f.هست یک؟(رشته)> str.Force_encoding(رشته.رمز) پایان (جدید(str, گزینه ها) ردیف).رشته پایان
نمونه (data = $ stdout ، ** گزینه ها) برای تغییر منبع کلیک کنید
این روش به عنوان نمونه CSV ، دقیقاً مانند CSV :: جدید () باز می گردد ، اما نمونه برای همه تماسهای آینده به این روش برای همان شیء داده (آزمایش شده توسط Object#Object_ID ()) ذخیره می شود و با همان گزینه ها باز می گردد. بشر
اگر یک بلوک داده شود ، نمونه به بلوک منتقل می شود و مقدار بازگشت به مقدار بازده بلوک تبدیل می شود.
# پرونده csv. rb ، خط 428 دنباله خود.نمونه، مثال(داده ها = $ stdout, **گزینه ها) # برای این روش تماس _signature_ ایجاد کنید ، شیء داده و گزینه ها غوغا = [داده ها.شیء_ id] + گزینه ها.مقادیر_ه(*پیش فرض_پیتون.کلیدی.مرتب سازی بر اساس <|همدی کردن| همدی کردن.to_s>) # برای این امضا نمونه ای را واگذار یا ایجاد کنید نمونه ها ||= هش.جدید نمونه، مثال = (نمونه ها[غوغا] ||= جدید(داده ها, گزینه ها)) if block_given؟ بازده نمونه، مثال # بلوک اجرا ، در صورت داده ، نتیجه بازگشت دیگر نمونه، مثال # یا نمونه را برگردانید پایان پایان
جدید (داده ها ، col_sep: "،" ، row_sep :: auto ، quote_char: '"" ، field_size_limit: nil ، مبدل ها: nil ، unconverted_fields: nil ، headers: false ، retu_headers: false ، nil ، header_converters: nil ، sple ، splep_blanks: false ، force_quotes: false ، skip_lines: nil ، liberal_parsing: false ، inte_encoding: nil ، exteal_encoding: nil ، رمزگذاری: nil ، nil_value: nil ، vattion_value: "" ، letote_empty: true) کلیک کنید تا منبع منبع
این سازنده یا یک رشته یا یک شیء IO را که در داده ها برای خواندن و/یا نوشتن منتقل شده است ، بسته بندی می کند. علاوه بر روشهای نمونه CSV ، چندین روش IO تفویض می شوند.(به CSV :: باز () برای یک لیست کامل مراجعه کنید.) اگر رشته ای را برای داده ها منتقل می کنید ، می توانید بعداً آن را (پس از نوشتن به آن) با CSV. String () بازیابی کنید.
توجه داشته باشید که یک رشته بسته بندی شده در ابتدا (برای خواندن) قرار خواهد گرفت. اگر می خواهید در پایان (برای نوشتن) ، از CSV :: تولید () استفاده کنید. اگر می خواهید موقعیت دیگری داشته باشید ، به جای آن یک شیء از پیش تعیین شده Stringio را منتقل کنید.
شما ممکن است ترجیحات خواندن و/یا نوشتن را در گزینه های گزینه تنظیم کنید. گزینه های موجود عبارتند از:
: col_sep
رشته بین هر قسمت قرار داده شده است. این رشته قبل از تجزیه در رمزگذاری داده ها رمزگذاری می شود.
: row_sep
رشته ضمیمه شده به انتهای هر سطر. این را می توان در تنظیم ویژه تنظیم کرد: تنظیم خودکار ، که درخواست می کند CSV به طور خودکار این را از داده ها کشف کند. کشف خودکار در داده هایی که به دنبال دنباله بعدی " r n" ، " n" یا " r" هستند ، می خواند. یک دنباله حتی اگر در یک قسمت نقل شده رخ دهد ، انتخاب می شود ، با فرض اینکه شما می توانید همان خط را در آنجا داشته باشید. اگر هیچ یک از این سکانس ها پیدا نشود ، داده ها Argf ، Stdin ، Stdout یا Stderr است یا جریان فقط برای خروجی در دسترس است ، از پیش فرض $ input_record_separator ($/) استفاده می شود. بدیهی است که کشف کمی زمان می برد. اگر سرعت مهم باشد به صورت دستی تنظیم کنید. همچنین توجه داشته باشید که اشیاء IO باید در حالت باینری در ویندوز باز شوند اگر از این ویژگی استفاده شود زیرا ترجمه خط خط می تواند در تنظیم مجدد موقعیت اسناد به جایی که قبل از خواندن پیش آمده است ، مشکلاتی ایجاد کند. این رشته قبل از تجزیه در رمزگذاری داده ها رمزگذاری می شود.
: quote_char
شخصیت مورد استفاده برای نقل قول فیلدها. این باید یک رشته شخصیت واحد باشد. این برای کاربردی مفید است که به طور نادرست به عنوان شخصیت نقل قول به جای صحیح "استفاده می کند.
: field_size_limit
این یک اندازه حداکثر است که CSV در انتظار نقل قول بسته برای یک زمینه خواهد خواند.(در حقیقت ، آن را به خط اول پایان می دهد که فراتر از این اندازه است.) اگر یک نقل قول را نتوانید در حد مجاز CSV یک ناهنجاری را ایجاد کند ، با فرض اینکه داده ها معیوب هستند. شما می توانید از این حد استفاده کنید تا از آنچه که به طور موثر حملات DOS به تجزیه کننده می رسد جلوگیری کنید. با این حال ، این حد می تواند باعث ایجاد یک پارس قانونی شود و به این ترتیب به طور پیش فرض به صفر یا خاموش تنظیم می شود.
: مبدل ها
مجموعه ای از نام های مبدل هش و/یا لامبدا که تبدیل به سفارشی می شوند. یک مبدل واحد لازم نیست در یک آرایه باشد. همه مبدل های داخلی قبل از تبدیل سعی می کنند زمینه های رمزگذاری را به UTF-8 تبدیل کنند. در صورت عدم رمزگذاری داده ها ، این تبدیل از این زمینه بدون تغییر خارج می شود.
: unvorted_fields
در صورت تنظیم صحیح ، یک روش Unconverted_fields () به همه ردیف های برگشتی (آرایه یا CSV :: Row) اضافه می شود که مزارع را مانند قبل از تبدیل باز می گرداند. توجه داشته باشید که: هدرهای تهیه شده توسط Array یا String زمینه های سند نبودند و بنابراین یک آرایه خالی وصل می شوند.
: هدرها
در صورت تنظیم: First_Row یا True ، ردیف اولیه پرونده CSV به عنوان یک ردیف از هدرها رفتار می شود. در صورت تنظیم یک آرایه ، از محتویات به عنوان هدر استفاده می شود. اگر روی یک رشته تنظیم شود ، رشته از طریق تماس csv :: parse_line () با همان: col_sep ،: row_sep ، و: quote_char به عنوان این نمونه برای تولید مجموعه ای از هدرها اجرا می شود. این تنظیم باعث می شود که CSV#Shift () ردیف ها را به عنوان CSV :: ROW به جای آرایه و CSV#خوانده شده () بازگرداند تا CSV :: جدول جدول را به جای آرایه ای از آرایه ها برگرداند.
: Retu_headers
هنگامی که نادرست است ، ردیف های هدر ساکت بلعیده می شوند. در صورت تنظیم صحیح ، ردیف های هدر در یک شیء CSV :: Row با هدرها و زمینه های یکسان بازگردانده می شوند (صرفه جویی کنید که زمینه ها از مبدل ها عبور نمی کنند).
: heads_hreaders
هنگامی که درست و: هدر تنظیم شده است ، یک ردیف هدر به خروجی اضافه می شود.
: header_converters
از نظر عملکرد یکسان است: مبدل ها صرفه جویی می کنند که تبدیل ها فقط به ردیف های هدر ساخته می شوند. تمام مبدل های داخلی سعی می کنند قبل از تبدیل ، هدرها را به UTF-8 تبدیل کنند. در صورت عدم استفاده از داده ها ، این تبدیل با تغییر سرریز می شود.
: skip_blanks
هنگامی که روی یک مقدار واقعی تنظیم شود ، CSV از هر ردیف خالی پرش می کند. توجه داشته باشید که این تنظیم از ردیف هایی که حاوی جداکننده های ستون هستند ، حتی اگر ردیف ها حاوی داده واقعی باشند ، پرش نمی کنند. اگر می خواهید ردیف هایی را که حاوی جداکننده هستند اما محتوای آن را رد کنید ، استفاده کنید: SKIP_LINES یا بازرسی از fields. compact. empty؟در هر ردیف
: force_quotes
هنگامی که روی یک مقدار واقعی تنظیم شود ، CSV تمام زمینه های CSV را که ایجاد می کند نقل می کند.
: skip_lines
هنگامی که روی یک شیء پاسخ به مطابقت قرار می گیرد ، هر خط مطابق با آن یک نظر در نظر گرفته می شود و در هنگام تجزیه. هنگامی که روی یک رشته تنظیم می شود ، ابتدا به یک regexp تبدیل می شود. هنگامی که روی NIL تنظیم شد ، هیچ خطی در نظر گرفته می شود. اگر شیء تصویب شده به مسابقه پاسخ ندهد ، ArgrentError پرتاب می شود.
: liberal_parsing
هنگامی که روی یک مقدار واقعی تنظیم شده است ، CSV سعی خواهد کرد ورودی را با RFC 4180 ، مانند نقل قول های مضاعف در زمینه های غیرقابل انعطاف ، جدا کند.
: nil_value
هنگام تنظیم یک شی ، هر مقادیر یک میدان خالی توسط شیء تنظیم شده جایگزین می شود ، نه صفر.
: vate_value
هنگام تنظیم یک شی ، هر مقدار از یک قسمت رشته خالی توسط شیء تنظیم شده جایگزین می شود.
: quote_empty
برای تنظیمات پیش فرض به CSV :: Default_options مراجعه کنید.
گزینه ها به دلایل عملکرد نمی توانند در روشهای نمونه نادیده گرفته شوند ، بنابراین حتماً آنچه را که می خواهید در اینجا تنظیم کنید.
# پرونده csv. rb ، خط 894 دنباله شروع کردن(داده ها, col_sep: ",", row_sep: :خودکار, QUOTE_CHAR: '"', field_size_limit: نیل, مبدل ها: نیل, Unconverted_fields: نیل, هدرها: دروغ, Retu_headers: دروغ, نوشتن_رها: نیل, header_converters: نیل, SKIP_BLANKS: دروغ, Force_quotes: دروغ, SKIP_LINES: نیل, liberal_parsing: دروغ, داخلی_نهای داخلی: نیل, Exteal_Encoding: نیل, رمزگذاری: نیل, nil_value: نیل, vale_value: "", QUOTE_EMPTY: درست است، واقعی) بالا بردن بحث کننده.جدید("نمی توان نیل را به عنوان CSV تجزیه کرد") if داده ها.صفر؟ # شیء IO را که از آن خواهیم خواند ایجاد کنید من = داده ها.هست یک؟(رشته) ? رفیق.جدید(داده ها) : داده ها encoding = تعیین_نه سازی(رمز, داخلی_نهای داخلی) base_fields_converter_options = <nil_value: nil_value, vale_value: vate_value,> initial_converters = مبدل initial_header_converters = header_converters parser_options = <column_separator: col_sep, row_separator: row_sep, QUOTE_CHACTER: نقل قول, field_size_limit: field_size_limit, Unconverted_fields: غیرقانونی_ میدان, هدرها: عناوین, Retu_headers: Retu_headers, SKIP_BLANKS: SKIP_BLANKS, SKIP_LINES: skip_lines, liberal_parsing: liberal_parsing, رمزگذاری: encoding, nil_value: nil_value, vale_value: vate_value,> parser = نیل writer_options = <رمزگذاری: encoding, Force_encoding: (نه رمز.صفر؟), Force_quotes: quotes force_, هدرها: عناوین, نوشتن_رها: نوشتن_, column_separator: col_sep, row_separator: row_sep, QUOTE_CHACTER: نقل قول, QUOTE_EMPTY: نقل قول_ خالی,> @Writer = نیل نویسنده if writer_options[: heads_hreaders] پایان باز (نام پرونده ، حالت = "RB" ، ** گزینه ها)<|faster_csv| .>برای تغییر منبع کلیک کنید باز (نام پرونده ، ** گزینه ها)<|faster_csv| .> باز (نام پرونده ، حالت = "RB" ، ** گزینه ها) باز (نام پرونده ، ** گزینه ها)
این روش یک شیء IO را باز می کند و آن را با CSV می پیچد. این به عنوان رابط اصلی برای نوشتن فایل CSV در نظر گرفته شده است.
شما باید یک نام پرونده را تصویب کنید و ممکن است به صورت اختیاری یک حالت برای Open () روبی اضافه کنید. همچنین ممکن است یک هش اختیاری را که حاوی هر گزینه CSV :: جدید () به عنوان استدلال نهایی درک می کند ، منتقل کنید.
این روش مانند تماس Ruby's Open () کار می کند ، به این ترتیب که یک شیء CSV را به یک بلوک ارائه شده منتقل می کند و هنگام خاتمه بلوک ، آن را می بندد ، یا در صورت عدم ارائه بلوک ، شیء CSV را باز می گرداند.(توجه: این متفاوت از کتابخانه Ruby 1. 8 CSV است که ردیف ها را به بلوک منتقل می کند. از CSV :: foreach () برای آن رفتار استفاده کنید.)
شما باید یک حالت را با یک طراح رمزگذاری تعبیه شده ارائه دهید مگر اینکه داده های شما در رمزگذاری باشد :: Default_Exteal (). CSV رمزگذاری شیء زیرین IO (تنظیم شده توسط روشی که عبور می کنید) را بررسی می کند تا نحوه تجزیه داده ها را تعیین کند. شما ممکن است یک رمزگذاری دوم را تهیه کنید تا داده های رمزگذاری شده همانطور که می توانید با یک تماس عادی به io :: باز () باز کنید. به عنوان مثال ، "RB: UTF-32BE: UTF-8" داده های UTF-32BE را از پرونده می خواند اما قبل از CSV آن را به UTF-8 تبدیل می کند.
یک شیء CSV باز شده برای راحتی به بسیاری از روشهای IO واگذار می کند. ممکن است تماس بگیرید:
- binmode ()
- binmode؟ ()
- بستن()
- close_read ()
- close_write ()
- بسته؟ ()
- EOF ()
- eof؟ ()
- Exteal_Encoding ()
- fcntl ()
- FILENO ()
- گله ()
- گرگرفتگی ()
- fsync ()
- داخلی_نکودینگ ()
- ioctl ()
- isatty ()
- مسیر()
- PID ()
- POS ()
- POS = ()
- بازگشایی ()
- به دنبال ()
- آمار ()
- همگام سازی ()
- همگام = ()
- بگو ()
- to_i ()
- to_io ()
- کوتاه کردن ()
- tty؟ ()
# پرونده csv. rb ، خط 634 دنباله خود.باز کن(نام فایل, حالت="R", **گزینه ها) # پرونده ای را با باقی مانده + args + بدون خط جدید باز کنید # دکوراتور File_opts= Universal_Newline: دروغ>.ادغام(گزینه ها) شروع f = فایل.باز کن(نام فایل, حالت, File_opts) نجات بحث کننده => e بالا بردن مگر اینکه /نیاز به binmode/.همخوانی داشتن؟(e.پیام) وت حالت == "R" حالت = "RB" File_opts= رمزگذاری: رمز.پیش فرض_ترونی>.ادغام(File_opts) مجدداً پایان شروع CSV = جدید(f, گزینه ها) نجات استثنا f.بستن بالا بردن پایان # بلوک های دسته مانند Ruby's Open () ، مانند کتابخانه CSV if block_given؟ شروع بازده CSV اطمینان حاصل شود CSV.بستن پایان دیگر CSV پایان پایان
تجزیه (Str ، ** گزینه ها)<|row| .>برای تغییر منبع کلیک کنید تجزیه (Str ، ** گزینه ها)
از این روش می توان برای جدا کردن CSV به راحتی از یک رشته استفاده کرد. شما ممکن است بلوکی را فراهم کنید که به نوبه خود با هر ردیف رشته فراخوانی شود ، یا فقط از آرایه های برگشتی از آرایه ها استفاده کنید (در صورت عدم ارائه بلوک).
شما STR خود را برای خواندن از آن عبور می دهید ، و گزینه های اختیاری که شامل هر چیزی CSV :: جدید () است.
# پرونده csv. rb ، خط 678 دنباله خود.تجزیه کردن(*استدلال, &مسدود کردن) CSV = جدید(*استدلال) برگشت CSV.هر یک(&مسدود کردن) if block_given؟ # محتوای Slurp ، در صورت عدم وجود بلوک شروع CSV.خواندن اطمینان حاصل شود CSV.بستن پایان پایان
parse_line (خط ، ** گزینه ها) برای تغییر منبع کلیک کنید
این روش میانبر برای تبدیل یک خط واحد از یک رشته CSV به یک آرایه است. توجه داشته باشید که اگر خط حاوی چندین ردیف باشد ، هر چیزی فراتر از ردیف اول نادیده گرفته می شود.
پارامتر گزینه ها می تواند هر چیزی باشد که CSV :: جدید () درک می کند.
# پرونده csv. rb ، خط 698 دنباله خود.parse_line(خط, **گزینه ها) جدید(خط, گزینه ها).تغییر مکان پایان
بخوانید (مسیر ، *گزینه ها) برای جابجایی منبع کلیک کنید
از این ابزار برای درهم ریختن یک فایل CSV در آرایه ای از آرایه ها استفاده کنید. مسیر فایل را ارسال کنید و هر گزینه ای را که CSV::new() درک می کند. این روش همچنین یک پارامتر :encoding اضافی را درک می کند که می توانید از آن برای تعیین رمزگذاری داده های موجود در فایل مورد مطالعه استفاده کنید. شما باید این را ارائه دهید مگر اینکه داده های شما در Encoding::default_exteal () باشد. CSV از این برای تعیین نحوه تجزیه داده ها استفاده می کند. می توانید رمزگذاری دومی را ارائه کنید تا داده ها هنگام خواندن رمزگذاری شوند. به عنوان مثال، رمزگذاری: "UTF-32BE:UTF-8" داده های UTF-32BE را از فایل می خواند اما قبل از تجزیه CSV آن را به UTF-8 تبدیل می کند.
# فایل csv. rb، خط ۷۱۳ دنباله خود.خواندن(مسیر, *گزینه ها) باز کن(مسیر, *گزینه ها) <|CSV| CSV.خواندن> پایان
خبرهای فارکس...
ما را در سایت خبرهای فارکس دنبال می کنید
برچسب :
نویسنده : شهره لرستانی
بازدید : 38
تاريخ : سه
شنبه
24 مرداد
1402 ساعت: 13:53