فقط ستونهای موردنیاز CSV را نگه دارید
ستونهای یک فایل CSV، TSV یا متن جداشده را با نام یا جایگاه انتخاب و جابهجا میکند و یک فایل UTF-۸ تازه میسازد؛ بدون بارگذاری و بدون اینکه نشانههای داخل گیومه با ساختار جدول اشتباه شوند.
فایل UTF-۸ از نوع CSV، TSV یا متن جداشده تا ۲۰ مگابایت. فایل در همین زبانه میماند.
چگونگی کار
نام ستون در نهایت به یک جایگاه میرسد
جدول جداشده دنبالهای از ردیفهاست و هر ردیف دنبالهای از فیلدها. ردیف عنوان
برای این جایگاهها نام میگذارد، اما دادهٔ زیر هر نام همچنان به یک موقعیت ثابت
وابسته است. انتخاب Email یعنی یافتن موقعیت یکتای این عنوان و برداشتن همان
موقعیت از تکتک ردیفهای بعدی.
اگر عنوان تکرار شود، نام بهتنهایی کافی نیست:
Name,Email,Email
Ada,home@example.test,work@example.test
در این نمونه #2 ایمیل نخست و #3 ایمیل دوم را انتخاب میکند. ابزار کلمهٔ
Email را نمیپذیرد، چون یک فایل ظاهراً معتبر با نشانی اشتباه از یک خطای آشکار
خطرناکتر است. شمارهها یکمبناییاند تا #1 همان ستون نخست قابل مشاهده باشد.
فهرست خالی همهٔ موقعیتها را نگه میدارد. این حالت برای تبدیل جداکننده یا بازنویسی ساختار فایل بدون حذف ستون هم مفید است.
چرا جداکردن متن با ویرگول کافی نیست
ویرگول فقط بیرون از گیومه مرز ساختاری است. این ردیف سه فیلد دارد، نه چهار:
Name,City,Note
Ada,London,"writes, tests"
فیلد گیومهدار میتواند شکست خط هم داشته باشد و گیومهٔ واقعی درون آن دو بار نوشته میشود. تجزیهگر هنگام حرکت روی نویسهها فقط یک حالت را نگه میدارد: آیا اکنون داخل گیومه است یا نه. بیرون گیومه، جداکننده فیلد را تمام میکند و شکست خط رکورد را؛ داخل گیومه هر دو متناند.
تشخیص خودکار نیز همین قانون را روی نخستین رکورد کامل اجرا میکند. گزینهٔ دستی هم باقی مانده است، چون در عنوان تکستونی هیچ جداکنندهای برای حدسزدن وجود ندارد.
نمونهٔ کامل
فایل چهارستونی زیر را در نظر بگیرید:
Name,Email,City,Note
Ada,ada@example.test,London,"writes, tests"
Grace,grace@example.test,New York,"line one
line two"
این دو خط را در فهرست ستونها وارد کنید:
Email
Name
خروجی ۲ ردیف داده دارد، ۲ ستون از ۴ ستون را نگه میدارد و Email را پیش از Name میآورد:
Email,Name
ada@example.test,Ada
grace@example.test,Grace
ویرگول و شکست خط ستون حذفشدهٔ Note همچنان درست خوانده میشوند؛ بنابراین نه ردیف خیالی میسازند و نه City را زیر عنوان دیگری میبرند. همین ورودی و بایتهای خروجی CRLF در آزمون ابزار ثبت شدهاند.
مقدار سلولها به تاریخ یا عدد تبدیل نمیشود، پس 007 همان 007 میماند.
ممکن است شکل فیزیکی فایل عوض شود: پایان رکوردها CRLF میشود و گیومهٔ غیرضروری
حذف یا گیومهٔ لازم افزوده میشود. هدف حفظ جدول انتخابشده است، نه حفظ تکتک
بایتهای قالببندی فایل اصلی.
مراحل انجام کار
- فایل را بهصورت UTF-۸ بخوان و وجود نشانگر BOM را ثبت کن؛ سپس آن را هنگام تجزیه موقتاً کنار بگذار.
- جداکنندهٔ انتخابی را به کار ببر یا ویرگول، نقطهویرگول، تب و خط عمودی بیرون از گیومه را در نخستین رکورد کامل بشمار.
- فیلدها را با قواعد گیومهٔ CSV بخوان؛ دو گیومهٔ پیاپی یک گیومهاند و جداکننده یا شکست خط داخل گیومه بخشی از سلول است.
- هر خط غیرخالی فهرست انتخاب را با عنوان دقیق یا جایگاه یکمبنایی مانند #۱ تطبیق بده؛ فهرست خالی همهٔ جایگاههای منبع را انتخاب میکند.
- عنوان و همهٔ ردیفهای داده را روی همان جایگاههای مرتبشده تصویر کن و کمبود انتهای یک ردیف کوتاه را با سلول خالی پر کن.
- مقدارها را برای جداکنندهٔ خروجی دوباره گیومهگذاری کن، رکوردها را با CRLF بنویس و اگر ورودی BOM داشت آن را برگردان.
فرضها
- ورودی بهصورت UTF-۸ خوانده میشود؛ فایلهای کدپیج قدیمی ویندوز باید ابتدا به UTF-۸ تبدیل شوند.
- ردیف نخست بهطور پیشفرض عنوان است. در فایل بدون عنوان فقط با جایگاههایی مانند #۱ و #۳ میتوان ستون انتخاب کرد.
- فاصلهٔ ابتدا و انتهای عنوان برای تطبیق حذف میشود، اما بزرگی حروف لاتین و بقیهٔ متن باید دقیقاً یکسان باشند.
- عنوان تکراری مبهم است و باید با جایگاه انتخاب شود؛ ابزار هرگز بیصدا نخستین مورد را حدس نمیزند.
- ابزار ستون کامل را نگه میدارد یا جابهجا میکند؛ عنوان را تغییر نمیدهد، ردیف را فیلتر نمیکند و نوع داده حدس نمیزند.
- سقف ورودی ۲۰ مگابایت، ۵۰۰٬۰۰۰ ردیف و ۵٬۰۰۰ ستون است و خروجی بیش از ۶۴ مگابایت ساخته نمیشود.
پرسشهای رایج
آیا فایل CSV پیش از حذف ستونها بارگذاری میشود؟
نه. یک Worker در همین زبانه فایل را میخواند، تجزیه میکند و فایل تازه را مینویسد. آزمون مرورگر با یک CSV واقعی اجرا میشود و اگر هنگام حضور فایل درخواستی از سایت خارج شود، انتشار را متوقف میکند.
چگونه یکی از دو ستون همنام را انتخاب کنم؟
از جایگاه یکمبنایی آن استفاده کنید؛ برای نمونه #۲. نام تکراری عمداً خطا میدهد، چون انتخاب بیصدای نخستین ستون میتواند دادهٔ نادرست را نگه دارد.
آیا ویرگول یا شکست خط داخل گیومه فایل تازه را خراب میکند؟
نه. این نشانهها تا زمانی که میان گیومهاند متن همان سلولاند. هنگام نوشتن خروجی نیز هر مقدار لازم دوباره با گیومه و گیومههای دوتایی امن میشود.
آیا مقدارهایی که شبیه فرمول صفحهگستردهاند تغییر میکنند؟
نه. این ابزار انتخاب مکانی است، نه پاکسازی امنیتی، و متن سلول را عوض نمیکند. فایل دریافتی از منبع ناشناس را هنگام بازکردن در صفحهگسترده همچنان ناشناس و غیرقابل اعتماد در نظر بگیرید.