মূল লেখায় যান
বাংলা
কাজের টেবিলযেসব সরঞ্জাম কিছুই আপলোড করে না
ODERSA সংস্থার একটি কর্মশালাকিছু বাইরে যায় না, কিছু জমা থাকে না, কিছু আমাদের কাছে পৌঁছায় না।

কর্মশালা · CSV আর JSON

কীভাবে কাজ করে : CSV আর JSON

যে কথাটি প্রায় কেউই বলে না: “CSV ফরম্যাট” কোনো মানই নয়। তার আদর্শ নথিটির গায়ে “শুধু জানানোর জন্য” লেখা আছে, আর সে নিজেই লেখে যে বিভিন্ন বাস্তবায়নের মধ্যে বিরাট তফাত আছে। এই কারণেই সরঞ্জামটি বিভাজকটি আন্দাজ না করে মেপে নেয়, আর সে কী পেল তা আপনাকে দেখিয়ে দেয়।

সরঞ্জামটি খুলুন

আপনি যা বসাচ্ছেন তা থেকেই বদলানোর দিকটি বুঝে নেওয়া হয়: যে লেখা দ্বিতীয় বা তৃতীয় বন্ধনী দিয়ে শুরু হয় তা JSON, বাকি সবই CSV। এই সাইটের এনক্রিপ্ট করা সিন্দুক আর রক্ষিত PDF-এর যুক্তিটিও একই: মানুষকে এমন একটি মোড বেছে নিতে বলা হয় না যা সে চেনে না।

CSV এমন একটি ফরম্যাট যার কোনো মান নেই, আর প্রায় সব ঝামেলার উৎস সেটাই। আদর্শ নথিটির গায়ে “শুধু জানানোর জন্য” লেখা আছে, আর সে নিজেই লেখে যে বিভিন্ন বাস্তবায়নের মধ্যে বিরাট তফাত আছে। ইউরোপের কোনো স্প্রেডশিটে বিভাজক একটি সেমিকোলন, কারণ সেখানে কমা দশমিকের বিভাজক। তাই সরঞ্জামটি বিভাজকটি মেপে নেয়: সে চারজন প্রার্থীকেই চেষ্টা করে দেখে আর যেটি সবচেয়ে নিয়মিত কলামের সংখ্যা দেয় সেটিই রাখে, তারপর কোনটি রাখল তা দেখিয়ে দেয়।

আদর্শ নথিটির নিয়মগুলি অক্ষরে অক্ষরে মানা হয়, তার মধ্যে সেই নিয়মটিও যেটি অর্ধেক বদলানোর যন্ত্রই ভুল করে: উদ্ধৃতিচিহ্নে ঘেরা একটি ঘরের ভিতরে একটি লাইন বদল থাকতে পারে। এই কারণেই পাঠকটি লেখাটিকে লাইন ধরে না কেটে অক্ষর ধরে ধরে এগোয়। ঘেরা একটি ঘরের ভিতরের উদ্ধৃতিচিহ্ন জোড়া হয়ে যায়, আর উল্টো দিকে সরঞ্জামটি সেটিকে তেমন করেই লেখে।

কীভাবে কাজ করে

  1. আপনার CSV, বা আপনার JSON বসিয়ে দিন। সরঞ্জামটি দুটির কোনটি তা চিনে নেয় আর বদলানোর দিকটি দেখিয়ে দেয়।
  2. সে যে বিভাজকটি মেপে নিয়েছে আর প্রথম শিরোনামের লাইনটি দেখে নিন। একটি বদলানোর যন্ত্রকে কেবল এই দুটি জিনিসই ঠকাতে পারে।
  3. ফলাফলটি কপি করুন বা ডাউনলোড করুন। ছকটি আপনাকে বলে দেয় কতগুলি লাইন আর কতগুলি কলাম পড়া হয়েছে।

গৃহীত ফরম্যাট

দিকটি লেখা থেকেই বুঝে নেওয়া হয়। দুই মাত্রার একটি ছক পেতে হলে JSON-টিকে অবজেক্টের একটি অ্যারে হতে হবে: প্রায় সব রপ্তানিই এই রূপটিই বানায়।

CSV ফরম্যাটের লেখা

কমা, সেমিকোলন, ট্যাব আর খাড়া দাগের মধ্য থেকে বিভাজক মেপে নেওয়া হয়। উদ্ধৃতিচিহ্নে ঘেরা ঘর, জোড়া উদ্ধৃতিচিহ্ন আর ঘরের ভিতরের লাইন বদল সবই সামলানো হয়।

JSON ফরম্যাটের লেখা

অবজেক্টের একটি অ্যারে থেকে প্রতিটি অবজেক্টের জন্য একটি লাইন আর পাওয়া প্রতিটি চাবির জন্য একটি কলাম হয়। ভিতরে বসানো কোনো মান তার নিজের ঘরেই JSON হিসেবে লেখা হয়, আর সরঞ্জামটি সে কথা জানিয়ে দেয়।

সামঞ্জস্যের ছক দেখুন

এর সীমা

CSV-র কোনো মান নেই, আর সরঞ্জামটি উল্টোটা দাবি করে না

2005 সালের আদর্শ নথিটি “শুধু জানানোর জন্য” শ্রেণিতে রাখা: সে একটি দেখা চল বর্ণনা করে, তাকে মান বানায় না, আর সে নিজেই লেখে যে বিভিন্ন বাস্তবায়নের মধ্যে বিরাট তফাত আছে। এর ব্যবহারিক ফল: একটি সফটওয়্যার যে ফাইলটি মেনে নেয়, অন্যটি সেটি বাতিল করতে পারে, আর তাতে কারও দোষ নেই। সরঞ্জামটি ওই নথির নিয়মগুলিই প্রয়োগ করে আর সে যা মেপেছে তা দেখিয়ে দেয়, যাতে আপনি নিজেই বিচার করতে পারেন।

কয়েক স্তরের একটি JSON কয়েক স্তরের একটি CSV হয় না

CSV একটি চ্যাপ্টা ছক: দুই মাত্রা, তিন নয়। কোনো মান নিজেই যখন একটি অবজেক্ট বা একটি তালিকা, তখন সরঞ্জামটি সেটি তার নিজের ঘরেই JSON হিসেবে লিখে দেয় আর আপনাকে জানিয়ে দেয়, যাতে তথ্যটি রয়ে যায় অথচ সেটিকে চ্যাপ্টা করে ফেলার ভান করা না হয়। আপনার হয়ে একটি চ্যাপ্টা করার রীতি বেছে নেওয়া, বানানো কলামের নামসহ, এমন একটি সিদ্ধান্ত হত যা নেওয়ার অধিকার আমাদের নেই।

সংখ্যায় বদলে নেওয়ার সুযোগ আছে, আর তাতে একটি পরিচয় নম্বর নষ্ট হতে পারে

শূন্য দিয়ে শুরু হওয়া একটি পিন কোড, একটি ফোন নম্বর, উনিশ অঙ্কের একটি পরিচয় নম্বর: সেগুলি সংখ্যায় বদলে দিলে সামনের শূন্যটি বা শেষের অঙ্কগুলি হারিয়ে যায়। ঘরটিতে আগে থেকেই টিক দেওয়া থাকে, কারণ মাপজোকের ফাইলে সেটাই আশা করা হয়, তবে তথ্যসূত্রের কোনো ফাইলে টিক তুলে দিন: সবই লেখা হিসেবেই থেকে যাবে।

CSV-র জন্য বাইটের ক্রমের চিহ্নটি দেওয়া হয়, আর তা এমনি এমনি নয়

খুব চালু একটি স্প্রেডশিট UTF-8-এ লেখা CSV তখনই ঠিকঠাক দেখায় যখন ফাইলটি এই চিহ্নটি দিয়ে শুরু হয়: তার নথিতেই কথাটা লেখা আছে। সেটি ছাড়া অক্ষরগুলি অদ্ভুত চিহ্নের সারি হয়ে যায়। কিন্তু ওই একই চিহ্নটিই আবার অন্য কিছু প্রোগ্রামকে ব্যর্থ করে দেয়, যারা সেটিকে প্রথম ঘরের একটি অক্ষর বলে পড়ে। সবার জন্য ভালো কোনো পছন্দ এখানে নেই: ঘরটি আছে, আর তার কারণটি তার পাশেই লেখা আছে।

এই সরঞ্জাম নিয়ে প্রশ্ন

আমার তথ্য কি কোথাও পাঠানো হয়?

না, আর এটি গোনার মতো: একটি CSV ফাইল প্রায় সবসময়ই সত্যিকারের তথ্যের একটি রপ্তানি, আর প্রায়ই তাতে নাম আর ঠিকানা থাকে। তিরিশ সেকেন্ডেই যাচাই করে নিন: F12 বোতাম দিয়ে ইন্সপেক্টর খুলুন, “Network” ট্যাব, তালিকাটি খালি করুন, তারপর আপনার ফাইলটি বসিয়ে বদলে নিন। একটি লাইনও আসে না। সংযোগ কেটে দিয়ে আবার করুন।

আমার CSV-তে সেমিকোলন আছে, এটা কি সমস্যা?

না, বরং ইউরোপে এটাই সবচেয়ে চেনা ঘটনা। সেখানে কমা দশমিকের বিভাজকের কাজ করে বলে স্প্রেডশিটগুলি কলাম আলাদা করতে সেমিকোলন ব্যবহার করে। সরঞ্জামটি চারটি সম্ভাব্য বিভাজকই চেষ্টা করে দেখে আর যেটি সবচেয়ে নিয়মিত কলামের সংখ্যা দেয় সেটিই রাখে, তারপর কোনটি রাখল তা আপনাকে বলে দেয়। তার মাপে ভুল হলে তালিকা থেকে সেটি চাপিয়ে দিন।

আমার পিন কোডগুলি সামনের শূন্যটি হারাচ্ছে।

“যা দেখতে সংখ্যার মতো তা সংখ্যায় বদলে দিন”-এর টিকটি তুলে দিন। একটি পিন কোড, একটি ফোন নম্বর, একটি অ্যাকাউন্ট নম্বর সংখ্যা নয়: সেগুলি অঙ্কের সারি, আর সেগুলিকে সংখ্যা হিসেবে ধরলে তাদের সামনের শূন্যটি হারিয়ে যায়। ঘরটিতে আগে থেকে টিক দেওয়া থাকে কারণ মাপজোকের ফাইলে সেটাই আশা করা হয়, তবে এক ক্লিকেই টিকটি তুলে দেওয়া যায় আর সবই লেখা হিসেবেই থেকে যায়।

আমার স্প্রেডশিটে CSV-টি খুললে অক্ষরগুলি ভেঙে যায় কেন?

কারণ খুব চালু একটি স্প্রেডশিট একটি CSV-তে UTF-8 তখনই চেনে যখন ফাইলটি বাইটের ক্রমের একটি চিহ্ন দিয়ে শুরু হয়: কথাটা তার নিজের নথিতেই লেখা আছে। সেটি জুড়ে দেওয়ার ঘরটিতে টিক দিন আর ফাইলটি আবার খুলুন। উল্টো দিকে সাবধান: ওই একই চিহ্নটিই কিছু প্রোগ্রামকে ব্যর্থ করে দেয়, যারা সেটিকে প্রথম ঘরের একটি অক্ষর বলে পড়ে। সবার জন্য ভালো কোনো পছন্দ নেই, কেবল গন্তব্যের জন্য মানানসই পছন্দটিই আছে।

আমার JSON-এ অবজেক্টের ভিতরে অবজেক্ট আছে। এই কাঠামোটির কী হয়?

সেটি রয়ে যায়, তবে ঘরের ভিতরে JSON হিসেবে লেখা হয়, আর সরঞ্জামটি আপনাকে সে কথা জানিয়ে দেয়। CSV একটি চ্যাপ্টা ছক, দুই মাত্রার: তিন স্তরের একটি কাঠামো সেখানে রাখার সবার জন্য এক কোনো উপায় নেই। রীতি অবশ্য আছে, সেগুলি “ঠিকানা.শহর”-এর মতো কলামের নাম বানিয়ে নেয়, আর প্রত্যেকটিই একটি খেয়ালখুশির পছন্দ। আমরা বরং আপনার তথ্যটি অক্ষত রাখতে চাই আর সেটি কোথায় আছে তা আপনাকে বলে দিতে চাই।