نرم‌افزار Excel برای کار روی داده‌های بسیار زیاد طراحی شده و می‌توانید جداولی شامل اطلاعات بسیار زیادی در آن ایجاد کنید اما مشکل محدودیت حجم فایل اکسل، گاهی جدی می‌شود. محدودیت تعداد ردیف‌ها در یک ورک‌شیت اکسل، حدود ۱ میلیون است و تعداد ستون‌ها هم حداکثر ۱ میلیون است. اگر اطلاعات شما بیش از این مقدار باشد، می‌توانید فایل اکسل را به دو یا چند بخش تقسیم کنید.

در این مقاله به روش تقسیم کردن فایل‌های CSV به چند بخش می‌پردازیم که برای کاربرانی که دیتای زیادی برای تحلیل دارند، مفید است.

گاهی مواقع حین تکمیل کردن لیستی از اسامی، ایمیل‌ها و شماره‌ها با محدودیت روبرو می‌شویم و گاهی ممکن است فایلی دریافت کنیم که شامل بیش از ۱ میلیون ردیف است! در این صورت اولین راهکار این است که فایل را به چند بخش تقسیم کنیم. البته می‌توان در برخی نرم‌افزارها با فایل‌های CSV که ردیف‌ها و ستون‌ها بیشتر است، کار کرد اما در Excel مجموعه‌ی آفیس مایکروسافت، محدودیت‌های خاصی وجود دارد.

فایل CSV در حقیقت یک فایل متنی ساده است که سلول‌های جدول با ویرگول یا کاما و ردیف‌ها با ایجاد خط جدید در آن تعریف شده‌اند.

نرم‌افزارهایی برای تقسیم فایل CSV به چند بخش

نرم‌افزارهای خاصی وجود دارد که فرآیند تقسیم کردن یک جدول عظیم به بخش‌های کوچک‌تر را سریع و ساده انجام می‌دهند. در ادامه به دو مورد از این نرم‌افزارهای جالب اشاره می‌کنیم.

CSV Chunker

این نرم‌افزار رایگان و متن باز، قابلیت کار روی فایل‌های بزرگ و تقسیم به چند بخش را در کمترین زمان ممکن دارد. به عنوان مثال اگر بخواهید فایلی با ۲۶۰ هزار ردیف را به ۱۰۶ بخش تقسیم کنید که هر یک ۲۵۰۰ ردیف دارد، تنها ۳ ثانیه زمان لازم است!

روش کار بسیار ساده است. ابتدا روی دکمه‌ی Select File کلیک کنید و فایل اصلی را آدرس‌دهی کنید. سپس تعداد ردیف‌ها در هر فایل را در فیلد Lines Per File تایپ کنید. در نهایت روی دکمه‌ی Split کلیک کنید.

توجه کنید که اگر تیک گزینه‌ی First Line is Header را بزنید، به این معنی است که اولین ردیف، ردیف عنوان است.

CSV Splitter

نرم‌افزار CSV Splitter هم با توجه به نامش، فایل‌های CSV را تکه‌تکه یا Split می‌کند. این نرم‌افزار طراحی بهتری دارد و با سرعت بالایی فایل‌های عظیم را به قطعه‌های کوچک‌تر تبدیل می‌کند. روش کار ساده است، می‌توانید آدرس فایل را در فیلد Filename وارد کنید یا روی دکمه‌ی ... کلیک کنید و آدرس‌دهی فایل اصلی را انجام بدهید.

قدم بعدی وارد کردن تعداد ردیف‌ها در هر فایل کوچک‌تر است و در نهایت با کلیک روی Execute، فایل شما قطعه‌قطعه می‌شود.

در این نرم‌افزار هم می‌توانید تیک گزینه‌ی First row contains column header را بزنید تا اولین ردیف در نقش ردیف عنوان ستون‌ها شناخته شود. باز زدن تیک گزینه‌ی Include header in each new package ، ردیف عنوان در تمام فایل‌های کوچک‌تر، به عنوان اولین ردیف جدول اضافه می‌شود.

تقسیم کردن فایل‌های CSV بزرگ به بخش‌های کوچک‌تر با دستورات cmd و فایل Batch

اگر اهل برنامه‌نویسی و استفاده از دستورات cmd‌ باشید، بدون هیچ نرم‌افزاری می‌توانید فایل‌های متنی CSV را به قطعات کوچک‌تر تقسیم کنید.

روش کار بسیار ساده است اما برای راحتی بیشتر، می‌توانید از دستورات زیر استفاده کنید. این دستورات را کپی کرده و در یک فایل متنی ساده که به کمک Notepad ایجاد کرده‌اید، پیست کنید.

@echo off

setlocal ENABLEDELAYEDEXPANSION

REM Edit this value to change the name of the file that needs splitting. Include the extension.

SET BFN=HCAHPSHospital.csv

REM Edit this value to change the number of lines per file.

SET LPF=2500

REM Edit this value to change the name of each short file. It will be followed by a number indicating where it is in the list.

SET SFN=HosptialSplitFile

REM Do not change beyond this line.

SET SFX=%BFN:~-3%

SET /A LineNum=0

SET /A FileNum=1

For /F "delims==" %%l in (%BFN%) Do (

SET /A LineNum+=1

echo %%l >> %SFN%!FileNum!.%SFX%

if !LineNum! EQU !LPF! (

SET /A LineNum=0

SET /A FileNum+=1 ) )

endlocal

Pause

و اما تغییراتی که می‌بایست در متن فوق بدهید:

  • دستور SET BFN= به فایل اصلی و حجیم اشاره می‌کند. روبروی آن نام فایل CSV اصلی را قرار بدهید که طبعاً پسوند آن csv است.
  • دستور SET LPF= به تعداد ردیف‌ها در هر یک از قطعات کوچک اشاره می‌کند که برای مثال از عدد ۲۵۰۰ استفاده کرده‌ایم.
  • دستور SET SFN= نیز برای مشخص کردن نام فایل‌های کوچک‌تر پیش‌بینی شده است. عبارت روبروی آن را به تناسب نیاز تغییر دهید.

پس از تغییرات در سه بخش موردبحث، از منوی File و گزینه‌ی Save As برای ذخیره کردن فایل متنی استفاده کنید و آن را با پسوند BAT ذخیره کنید نه TXT که حالت پیش‌فرض است. می‌توانید پس از ذخیره کردن فایل نیز نام آن را تغییر دهید و پسوند جدید BAT را برای آن در نظر بگیرید.

اکنون فایل bat را در کنار فایل CSV در یک فولدر قرار دهید و سپس روی آن دبل‌کلیک کنید. به این ترتیب ایجاد قطعه‌های کوچک شروع می‌شود و پس از مدتی فرآیند تکمیل می‌شود. سرعت این اسکریپت کمتر از دو نرم‌افزار معرفی شده است.

تقسیم فایل CSV‌ به بخش‌های کوچک با اسکریپت PowerShell

سرعت اجرای فایل Batch بسیار زیاد است اما روش سریع‌تر این است که از اسکریپت پاورشل در ویندوز ۱۰ استفاده کنید. به خصوص در این فرآیند خاص که تقسیم فایلی به چند بخش است، PowerShell سرعت عمل بیشتری دارد.

اسکریپت زیر ظرف مدت ۳ ثانیه، فایل CSV مثال ما که ۲۶۰ هزار ردیف دارد را به بخش‌هایی با ۲۵۰۰ ردیف تقسیم می‌کند. دقت کنید که آدرس فایل منبع که C:\Users\Gavin\Downloads\Hospital_Revised_Flatfiles\HCAHPSHospital.csv است را تغییر دهید و تعداد ردیف‌های هر بخش که پس از آپشن ReadCount ذکر شده را به تناسب نیاز تغییر بدهید. در نهایت محل ذخیره شدن قطعات و نام فایل‌ها را با ویرایش عبارت C:\Users\Gavin\Downloads\Hospital_Revised_Flatfiles\split\splitfile_$i.csv تغییر دهید. توجه کنید که بخش آخر نام فایل‌های کوچک، _$i است که آندرلاین و یک عدد متغیر را در انتهای نام قطعات قرار می‌دهد. می‌توانید این بخش را تغییر بدهید اما همواره به یک بخش متغیر یعنی $i نیاز دارید. 

$i=0; Get-Content C:\Users\Gavin\Downloads\Hospital_Revised_Flatfiles\HCAHPSHospital.csv -ReadCount 2500 | %{$i++; $_ | Out-File C:\Users\Gavin\Downloads\Hospital_Revised_Flatfiles\split\splitfile_$i.csv}

این اسکریپت ساده را می‌توانید در ابزار PowerShell ISE ویندوز ۱۰ تایپ کرده و اجرا کنید. برای دسترسی به این ابزار، در منوی استارت عبارت PowerShell ISE را سرچ کنید و روی اولین نتیجه کلیک کنید. پس از نمایان شدن پنجره‌ی ابزار PowerShell ISE، اسکریپت را پیست کنید و سپس روی دکمه‌ی Run کلیک کنید و یا F5‌ را فشار دهید.