Excel কেন আপনার CSV নষ্ট করে
পোস্টকোডের শুরুর শূন্য হারিয়ে যায়, প্রোডাক্ট কোড তারিখ হয়ে যায়, আর লম্বা আইডি চুপচাপ রাউন্ড হয়ে যায়। এটি ঘটে ফাইল খোলার সময়, সেভের সময় নয় — আর এ কারণেই অনেকে কখনো বুঝতেই পারেন না ভুলটা কোথায় হলো।
সর্বশেষ পর্যালোচনা:
ক্ষতিটা হয় ফাইল খোলার সময়
এই অংশটির কারণেই সমস্যাটি ধরা এত কঠিন। CSV একটি টেক্সট ফাইল: এর প্রতিটি মান কেবল কিছু অক্ষর, আর কোনটির মানে কী, ফাইলের কোথাও তা লেখা নেই। Excel একটি CSV খোলার সময় প্রতিটি কলামের ধরন আন্দাজ করে, সেই অনুযায়ী মানগুলো বদলে নেয়, আর সেই মুহূর্ত থেকে বদলানো সংস্করণটিই ধরে রাখে। ফাইলটি সেভ করলে বদলগুলো ফাইলে লেখা হয়ে যায়।
অর্থাৎ ফাইলটি ঠিকই ছিল, আপনি যে ফাইল সেভ করলেন সেটি ঠিক নয়, আর কোনো সময়েই কিছু আপনাকে সতর্ক করেনি। মানুষ ধরে নেন এক্সপোর্টে সমস্যা ছিল, আবার এক্সপোর্ট করেন, আর একই ফল পান — কারণ ক্ষতিটা হচ্ছে তাঁদের নিজের কম্পিউটারে, ডাউনলোডের পরে।
যে চারটি রূপান্তর ক্ষতি করে
শুরুর শূন্য বাদ পড়ে যায়। 01234 পোস্টকোড, ফরাসি ডিপার্টমেন্ট কোড, অ্যাকাউন্ট নম্বর, শূন্য দিয়ে শুরু হওয়া ফোন নম্বর — সবই সংখ্যার মতো দেখায়, তাই শূন্যটিকে অর্থহীন ভেবে ফেলে দেওয়া হয়। এটি অর্থহীন নয়; এটি আইডেন্টিফায়ারেরই অংশ।
লম্বা সংখ্যা রাউন্ড হয়ে যায়। স্প্রেডশিট সংখ্যাকে প্রায় পনেরোটি সার্থক অঙ্কের ফ্লোটিং পয়েন্ট হিসেবে রাখে, তাই অর্ডার রেফারেন্স, ক্রেডিট কার্ড নম্বর, IMEI বা ৬৪-বিট আইডেন্টিফায়ার চুপচাপ রাউন্ড হয়ে যায় — শেষের অঙ্কগুলো শূন্য হয়ে যায়। সেলটি দেখতে সংখ্যার মতো, কিন্তু সংখ্যাটি ভুল।
তারিখের মতো দেখতে যেকোনো কিছু নতুন করে ফরম্যাট হয়, স্থানীয় নিয়ম অনুযায়ী। 03/05 এক দেশে মার্চ, আরেক দেশে মে, তাই একই ফাইল দুটি অফিসে খুললে দুটি ভিন্ন ডেটাসেট তৈরি হয়। আরও খারাপ, যেগুলো কখনো তারিখই ছিল না, সেগুলোও বদলে যায়: SEPT1-এর মতো জিনের নাম তারিখ হয়ে যায় — সমস্যাটি এতটাই নাছোড় যে শেষ পর্যন্ত জিনতত্ত্ববিদেরা লড়াই চালিয়ে যাওয়ার বদলে জিনগুলোর নামই বদলে ফেলেন।
অ্যাকসেন্টযুক্ত অক্ষর দুর্বোধ্য চিহ্নে (mojibake) পরিণত হয়। CSV-তে এর ক্যারেক্টার এনকোডিংয়ের কোনো তথ্য থাকে না, তাই UTF-8-এ সেভ করা ফাইল পুরোনো কোড পেজ হিসেবে পড়লে — বা উল্টোটা হলে — ঠিক সেই সারিগুলোই গোলমাল হয়ে যায়, যেখানে অ্যাকসেন্টযুক্ত নাম আছে।
সমাধান: খুলবেন না, ইমপোর্ট করুন
যে CSV গুরুত্বপূর্ণ, সেটিতে কখনো ডাবল-ক্লিক করবেন না। ডাবল-ক্লিক করলে Excel আন্দাজ করার অনুমতি পায়, আর সে পূর্ণ আত্মবিশ্বাসে আন্দাজ করে।
এর বদলে Data → From Text/CSV ব্যবহার করুন। ইমপোর্ট ডায়ালগে কিছু পার্স হওয়ার আগেই প্রতিটি কলামের ধরন ঠিক করে দেওয়া যায় — পোস্টকোড আর আইডেন্টিফায়ারের কলামকে Text হিসেবে চিহ্নিত করুন, তাহলে সেগুলো ফাইলে যেমন আছে হুবহু তেমনই আসবে। এখানে এনকোডিং আর ডিলিমিটারও নিজে বলে দেওয়া যায়, আন্দাজের ওপর ছাড়তে হয় না। এতে বিশ সেকেন্ড লাগে, আর সমাধান এটুকুই।
Google Sheets-এও একই কথা: File → Import, তারপর “Convert text to numbers, dates and formulas” বন্ধ করুন। LibreOffice Calc ডিফল্টভাবেই কলামের ধরনের ডায়ালগ দেখায় — যে অল্প কয়েকটি ক্ষেত্রে এটি সোজাসুজি বেশি ভালো আচরণ করে, এটি তার একটি।
ইমপোর্টের আগে দেখে নিন
কোনো কিছু আগেই ভুল হয়ে গেলে, প্রথম কাজের পদক্ষেপ হলো কোনো স্প্রেডশিট না ছুঁইয়ে ফাইলটি দেখা। CSV দেখলে বাইটগুলো যা বলে, মানগুলো ঠিক সেভাবেই দেখা যায় — শুরুর শূন্য আছে, লম্বা সংখ্যা সম্পূর্ণ, তারিখ ঠিক যে লেখায় লেখা হয়েছিল সেভাবেই। এতে সঙ্গে সঙ্গে বোঝা যায় ভুলটা এক্সপোর্টে, নাকি ইমপোর্টে।
এটি আরও দেখায় সেই দুটি জিনিস, যা CSV নিজের সম্পর্কে কখনো বলে না: ডিলিমিটার — কমা, সেমিকোলন নাকি ট্যাব; ইউরোপীয় লোকেল সেমিকোলন দিয়ে এক্সপোর্ট করে, কারণ সেখানে কমা দশমিক চিহ্ন — আর এনকোডিং। ইমপোর্টের আগে দুটিই জানা থাকলে বাকি আন্দাজের বেশিরভাগই দূর হয়ে যায়।
CSV যদি আপনিই তৈরি করেন
এক্সপোর্টের সময় কয়েকটি সিদ্ধান্ত নিলে পরে এর কিছুই ঘটে না।
ফাইলটি Windows-এর Excel-এ খোলা হবে জানলে বাইট অর্ডার মার্কসহ UTF-8 লিখুন। Excel এই মার্ক দেখে UTF-8 শনাক্ত করে, আর এটি না থাকলে অ্যাকসেন্টযুক্ত অক্ষর গোলমাল করে ফেলে — যে বিরল কয়েকটি ক্ষেত্রে BOM যোগ করা ঝামেলা নয়, বরং সঠিক সিদ্ধান্ত, এটি তার একটি।
ভুল পড়া হতে পারে এমন প্রতিটি ফিল্ড কোট করুন, আর আইডেন্টিফায়ারের কলাম সবসময় কোট করুন। কোট করলে খোলার সময় Excel-এর রূপান্তর থামে না, কিন্তু অন্য প্রতিটি ব্যবহারকারী প্রোগ্রামের কাছে উদ্দেশ্যটি স্পষ্ট হয়।
CSV একেবারে ব্যবহার না করার কথাও ভাবুন। প্রাপক যদি JSON বা আসল স্প্রেডশিট নিতে পারেন, দুটিতেই ধরন স্পষ্টভাবে লেখা থাকে, আর এর কোনো সমস্যাই দুটির কোনোটিতে নেই। CSV-এর গুণ হলো সবকিছু এটি পড়তে পারে; দুর্বলতা হলো এতে কী বলা আছে, তা নিয়ে কেউই একমত নয়।
সাধারণ প্রশ্নোত্তর
সেভ করার পরে কি ক্ষতিটা ফেরানো যায়?
নির্ভরযোগ্যভাবে নয়। বাদ পড়া শুরুর শূন্য আর রাউন্ড হওয়া অঙ্ক হারিয়ে গেছে — ফাইলে এমন কিছু নেই, যা থেকে সেগুলো ফেরানো যায়। মূল সোর্স থেকে আবার এক্সপোর্ট করুন; এ কারণেই সোর্স এক্সপোর্টটি অক্ষত রাখা ডিস্কের জায়গার চেয়ে মূল্যবান।
আমার CSV কেন একটি লম্বা কলাম হিসেবে খোলে?
ডিলিমিটার স্প্রেডশিটের প্রত্যাশার সঙ্গে মিলছে না — সাধারণত কমা ব্যবহারকারী লোকেলে সেমিকোলনের ফাইল খোলা হয়েছে, বা উল্টোটা। ইমপোর্ট ডায়ালগে এটি বলে দেওয়া যায়, যা সিস্টেমের রিজিওনাল সেটিংস বদলানোর চেয়ে দ্রুত।
প্রথম কলামের নামের শুরুতে অদ্ভুত অক্ষরটি কী?
একটি বাইট অর্ডার মার্ক, যা এনকোডিংয়ের ইঙ্গিত হিসেবে না পড়ে টেক্সট হিসেবে পড়া হয়েছে। এটিই সেই মার্ক, যা Excel-এ অ্যাকসেন্টযুক্ত অক্ষর ঠিক রাখে, আর এ কারণেই এটি একই সঙ্গে কাজের ও বিরক্তিকর — বেশিরভাগ ভালো CSV পার্সার এটি নিজে থেকেই সরিয়ে দেয়।
CSV-এর কি কোনো স্ট্যান্ডার্ড আছে?
শুধু ২০০৫ সালের একটি পরামর্শমূলক স্পেসিফিকেশন, যা বেশিরভাগ টুল কী করে তার বর্ণনা দেয়, আর প্রচুর সফটওয়্যার আছে যা অন্য কিছু করে। এ কারণেই ডিলিমিটার, কোটিং, লাইনের শেষ আর এনকোডিং সবই ভিন্ন ভিন্ন হয় — আর এ কারণেই ধরে না নিয়ে শনাক্ত করাই আসল ফাইলে কাজ করার একমাত্র উপায়।
টেক্সট এডিটরে একটি সারি কেন কয়েকটি লাইনে ভেঙে যায়?
কারণ কোট করা ফিল্ডে বৈধভাবেই লাইন ব্রেক থাকতে পারে — সাধারণত ঠিকানার ফিল্ডে। রেকর্ডটি তবু একটিই সারি; যা নতুন লাইন ধরে ফাইল ভাগ করে, তা ঠিক সেই সারিগুলোই নষ্ট করবে — আর এ কারণেই কমা বা নতুন লাইন ধরে ভাগ করা CSV পড়ার ভুল উপায়।