সীমাবদ্ধ ফাইলগুলি হ্যান্ডেল করার সর্বোত্তম উপায়


16

সুতরাং সাধারণত কোনও সিএসভি ফাইল এটির ক্ষেত্র এবং লাইন ডিলিমিটার হিসাবে কমা এবং প্রত্যাবর্তন অক্ষর ব্যবহার করে।

এটি পাঠ্যের সাথে সুস্পষ্ট সমস্যার মধ্যে চলে যা এতে উভয় অক্ষরই থাকতে পারে।

স্পষ্টতই সেখানে বিকল্পগুলি রয়েছে (সেগুলি পালিয়ে যাওয়া) তবে লোকেরা কীভাবে এটি পরিচালনা করে? পাইপ বা টিল্ডাস - বিভিন্ন অক্ষর ব্যবহার করবেন? তাদের পালাতে? ডিলিমিটেড ফাইলগুলি ব্যবহার করবেন না, 2010 এর পরে এবং আমাদের এখন এক্সএমএল আছে?

সমস্যা না দেখার একটি শালীন সুযোগের জন্য কমপক্ষে চেষ্টা করা।

(কেবল স্পষ্ট করে বলতে গেলে, এটি আরও দৃ than় কিছু না হওয়ার চেয়ে কৌতূহল থেকে বেরিয়ে আসা প্রশ্ন - এটি এমন একটি বিষয় যা আমি সময় এবং সময়ের সাথে আবার ডেটা নিয়ে খেলি, সবসময় এটিকে ঘিরে ধরেছিলাম তবে এটি সাধারণত কিছুটা ভাল, নোংরা, এবং অন্য লোকের অভিজ্ঞতা কী তা ভেবে অবাক হয়েছিল)।


সিএসভি ব্যবহারের বিষয়ে সাবধানতার সাথে চিন্তা করুন - এটি মোকাবেলা করা সহজ এবং সহজ (সাধারণ পালানোর নিয়মের উত্তর দেখুন) তবে এটি প্রায় যতটা আন্তঃ অপারেবল হওয়া উচিত তা নয় - আপনি যদি কেবল নিজের প্রোগ্রামগুলির সাথে যোগাযোগ করেন তবে এটি ঠিক আছে, তবে আপনি যদি অন্যত্র আমদানি করতে চান এটি কিছুটা অদ্ভুত হয়ে যায় কারণ বিভিন্ন প্রোগ্রামগুলি বিভিন্ন পালানোর নিয়ম মেনে চলে।
মাইকেল কোহেন

@ মিশেল - একেবারে। যদিও বিষয়টি হ'ল এটি সর্বব্যাপী যে আপনি প্রায় সবসময় এমন সময়গুলির সাথে আসবেন যখন এটি একটি খুব লোভনীয় বিকল্প এবং অনেক পুরানো সিস্টেমের ক্ষেত্রে এটিই একমাত্র বিকল্প।
জন হপকিন্স

পরিপক্ক লাইব্রেরিগুলি অক্ষর-বিযুক্ত ফাইলগুলি পড়ার এবং লেখার জন্য বহু ভাষায় (অবশ্যই সাধারণ) বিদ্যমান। তারা সবচেয়ে যে কোনও পরিস্থিতি পরিচালনা করবে handle নিজের সিএসভি পার্সার লেখার বিষয়টি অ্যান্টি-প্যাটার্নের একটি সাধারণ ধরণের বলে মনে হয়।
কোয়ান্টিন-স্টারিন

উত্তর:


13

উইকিপিডিয়া অনুসারে :

এম্বেড করা কমা সহ ক্ষেত্রগুলি অবশ্যই ডাবল-উদ্ধৃতি অক্ষরের মধ্যে আবদ্ধ থাকতে হবে।

এবং আরো কিছু:

এমবেডড ডাবল-কোট অক্ষরের ক্ষেত্রগুলি অবশ্যই ডাবল-উদ্ধৃতি অক্ষরের মধ্যে আবদ্ধ হওয়া আবশ্যক এবং এম্বেড থাকা ডাবল-কোট অক্ষরের প্রত্যেকটি অবশ্যই ডাবল-উদ্ধৃতি অক্ষরের জোড় দ্বারা প্রতিনিধিত্ব করতে হবে।

আমি জানি না কে এটি আবিষ্কার করেছিলেন, তবে এটি কার্যকরভাবে দেখায় যে শেষ পর্যন্ত আপনাকে পালাতে হবে। এটিই একমাত্র কঠিন সমাধান। অন্য সব কিছুই নালী টেপের শীর্ষে কেবল নালী টেপ: সম্ভবত আপাতত কাজ করে তবে অবশেষে আপনি এমন একটি মামলায় ঝাঁপিয়ে পড়বেন যেখানে আপনাকে ব্যতিক্রম ব্যতিক্রমের প্রয়োজন হয় এবং আপনার নিয়মের মাডবলের আগে এটি বেশি সময় নেয় না doesn't একটি সহজ পালানোর চরিত্রের সমাধানের চেয়ে উপায় আরও জটিল।

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


3
কী হওয়া উচিত এবং কী .. প্রায়শই আলাদা হয় :)
টিম পোস্ট

আমি মনে করি সমাধানটি বেশ ঠিক আছে। সহজ ডেটার জন্য, যে CSV জরিমানা, জটিল ডেটার জন্য তারপর necesary হয় উদ্ধৃত, এবং পলায়নের কাজ করে "" সঙ্গে "ট্রেস বেসিক ফিরে।
Ernelli

1
@ এর্নেলি: এখন যেহেতু আমি এটি সম্পর্কে আরও বেশি চিন্তা করি, এটি আসলে মানব-পঠনযোগ্যতা এবং সরলতার মধ্যে যুক্তিসঙ্গত আপস হতে পারে। সমস্যাটি অবলম্বন করা হ'ল এটি কম্পিউটারকে বিশ্লেষণ করার পক্ষে ক্ষুদ্র হলেও যদিও এটি মানুষের কাছে কুশ্রী লাগে । সুতরাং, কেবল বিরল ক্ষেত্রেই সংরক্ষণ ("এম্বেডড ডাবল-কোট অক্ষরের ক্ষেত্র") আউটপুট উত্পাদন করে যা সাধারণত মানব-পঠনযোগ্য বলে মনে হয়। ক্ষেত্রের নামগুলিতে কমাগুলি ক্ষেত্রের নামগুলিতে ডাবল-কোটের চেয়ে বেশি ব্যবহার করা হয় বলে ধরে নেওয়া এটি একটি ভাল সমাধান।
জুনাস পুলক্কা

2

আমি ধরে নিচ্ছি আপনার কাছে এরকম কিছু রয়েছে:

Foo,Baz,,,"Foo,Baz"

যদি ডিলিমিটারযুক্ত স্ট্রিংগুলি উদ্ধৃত না হয় বা পালানো হয় না তবে আপনার কাছে ফাইলটি বিশ্লেষণের কোনও সত্যিকারের নির্ভরযোগ্য উপায় নেই।

যাইহোক, আপনি বিশ্লেষণের জন্য ডেটা পরীক্ষা করতে এবং এই জাতীয় সিদ্ধান্তগুলি আঁকতে পারেন:

  • কমা দ্বারা পৃথক করা ফ্লোটগুলি স্ট্রিং হিসাবে গণ্য করা উচিত
  • যদি এর আগে বা তার পরে লাইনটিতে কম ডেলিমিটার থাকে তবে এই লাইনটি পার্সিং এড়িয়ে যান এবং এটি লগ করুন
  • 'মত "আচরণ করুন

এই জাতীয় জিনিসগুলি পরিচালনা করতে আপনাকে পার্সার লিখতে হবে তবে এটি জটিল হবে না।

আমার অভিজ্ঞতায় এক্সেলের মতো কিছু থেকে বৃহত্তর ডাম্প আমদানি করার ফলস্বরূপ সর্বদা ফিরে যেতে হবে এবং কিছু অদ্ভুতদর্শনগুলি পর্যালোচনা করতে হবে। আপনার চ্যালেঞ্জ আপনার প্রোগ্রাম দিতে হয় মাত্র , যাতে ডেটা সংক্রান্ত যে এটি একটি পাগল সন্নিবেশ করে না যথেষ্ট সাধারণ জ্ঞান। তারপরে কী লগ হয়েছে তা পর্যালোচনা করুন এবং ধুয়ে / ধুয়ে / পুনরাবৃত্তি করুন।

আমি একবার একটি ছোট সংস্থার অভ্যন্তরীণ FAQ পরিচালনা করেছি যা সমস্ত উবুন্টু ওয়ার্কস্টেশন ব্যবহার করে। প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলির একটি অংশ 'শেল শর্টকাট' দিয়েছে এবং এটি আমার কাছে পাইপ সীমিত করে। ঠিক আছে, উত্তরগুলি সাধারণত পাইপ সীমাবদ্ধ ছিল (যেমন গ্রেপ ফু | কিছু) এবং উদ্ধৃত বা পালানো হয়নি। আমি যে ব্যথা অনুভব করি :)


2

একটি পয়েন্ট অবধি CSV এর সাথে কোনও ভুল নেই

সিএসভি কঠোরভাবে সংজ্ঞায়িত ডেটার জন্য ভাল কাজ করে যা ফর্ম্যাট পরিবর্তন করার সম্ভাবনা নেই এবং প্রাপক পার্সারে অনেক বিস্ময় প্রকাশ করে না।

এখানে বড় গোটাসের একটি সহজ তালিকা রয়েছে:

  1. "" এর মধ্যে "" এসকেপিং করা হয় (ক্ষেত্রটিতে ক্ষেত্রের ডিলিমিটার রয়েছে)
  2. "" এর সিআরএলএফ রয়েছে (ক্ষেত্রটিতে লাইন ডেলিমিটার রয়েছে)
  3. ইউনিকোড (অন্তর্নিহিত পাঠ্য বিন্যাস অপর্যাপ্ত হতে পারে)
  4. বিভিন্ন ওএসের জন্য আলাদা লাইন টার্মিনেটর (সিআর বা সিআরএলএফ বা এলএফ বা এনএলইউ?)
  5. ইনলাইন মন্তব্য (#, //, -,; ইত্যাদি সহ পূর্ববর্তী লাইনের)
  6. সংস্করণ পরিচালনা (ফাইলের সর্বশেষ সংস্করণে কম বেশি ক্ষেত্র রয়েছে)
  7. NUL এবং খালি ডেটার মধ্যে পার্থক্য করা (, "", খালি তবে ,,, নাল?)

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

একটি জনপ্রিয় বিকল্প হ'ল "অদ্ভুত চরিত্রের ডেলিমিটার" কৌশল। এটি উপরের পরিমাণে অনেকগুলি পালিয়ে যাওয়ার সমস্যাগুলির মুখোমুখি হয় কারণ আপনি | এর মতো কিছু ব্যবহার করেন (পাইপ) ক্ষেত্রের সীমানা নির্ধারণের জন্য অক্ষর এবং রেকর্ড সমাপ্তির জন্য একটি সিআরএলএফ। এটি মাল্টি-লাইন ফিল্ড ইস্যুটির আশেপাশে আসে না (যদি আপনি কোনও ফিল্ড কাউন্টার ব্যবহার না করেন) তবে আপনি মানুষের জন্য সুন্দর বিন্যাসিত লাইন পান।

সামগ্রিকভাবে, আপনি যদি জাভা বিশ্বে এই ধরণের ফাইল পরিচালনা করার জন্য কেবল একটি সহজ উপায় সন্ধান করছেন তবে আপনি কেবল এটিতে ওপেনসিএসভি ফেলে দিতে পারেন। এইভাবে আপনি সমস্ত সমস্যাগুলি একটি প্রতিষ্ঠিত কাঠামোয় বিমূর্ত করেন।


2

CSV এখনও অনেক পরিস্থিতিতে একটি বৈধ ফর্ম্যাট, বিশেষত যেহেতু কোনও গ্রাহকের পক্ষে আপনার অ্যাপ্লিকেশনটিতে আমদানি করা দরকার এমন ডেটা লেখার সহজতম উপায় হয়ে উঠেছে। আমাদের বেশিরভাগ গ্রাহক এক্সএমএল নিয়ে কাজ করতে পছন্দ করেন, সম্ভবত এটি খুব ভার্জোজ এবং এর মধ্যে "ভয়ঙ্কর" অ্যাঙ্গেল বন্ধনী রয়েছে। সম্মতিযুক্ত চরিত্রের দ্বারা পৃথক করা আইটেমগুলির একটি সাধারণ তালিকার চারপাশে তাদের মস্তিষ্ককে জড়িয়ে রাখা এতো সহজ and এবং এটিও সম্মত হন যে ক্ষেত্রের বিষয়বস্তুতে একই অক্ষরটির অনুমতি দেওয়া হবে না।

এটি বলেছিল, আপনাকে এখনও ইনপুটটি সঠিকভাবে পরিচালনা করতে হবে এবং তারা অবৈধ অক্ষর ব্যবহার করে এমন পরিস্থিতিগুলি পরীক্ষা করতে হবে। আমি আমার সিএসভি পার্সিং প্রয়োজনীয়তার জন্য ফাইলহেল্পার্স ব্যবহার শুরু করেছি।


1

আমি সাধারনত স্ট্যান্ডার্ডের সাথে লেগে থাকি এবং সেগুলি থেকে পালাতে পারি। বেশিরভাগ প্রোগ্রামিং ভাষায় ভাল বিল্টইন সমর্থন বা একটি ভাল গ্রন্থাগার পাওয়া যায়।

এটি কোন ফর্ম্যাটটি ব্যবহৃত হবে সেই পরিস্থিতির উপর নির্ভর করে এবং সিএসভি সাধারণ তথ্য বিন্যাস কাঠামো বিনিময় করার জন্য একটি যুক্তিসঙ্গত ফর্ম্যাট।


0

যে CSV ভুলে যান, ব্যবহার তাদেরকে JSON । সহজে লেখা, পার্স করা সহজ। এক্সএমএল তাই 2005


6
এবং আপনি যখন JSON ফর্ম্যাট অংশ (যেমন {বা,) এর একটি অংশ ব্যবহার করতে চান তখন একই সমস্যা রয়েছে
সালানদুর

সালানদুর: একদম নয়! কিভাবে পালানো যায় তার সঠিক নিয়ম রয়েছে! তবে {এবং, এমনকি পালানোর দরকার নেই, কারণ ভিতরে স্ট্রিং রয়েছে, সেগুলি দ্ব্যর্থক নয়!
ব্যবহারকারী 281377

1
ভাল এবং ভাল, তবে আমি "JSON রফতানি" বৈশিষ্ট্যযুক্ত এক্সেলকে স্মরণ করতে পারি না :) এমন সময় আসে যখন আপনাকে আরও অদ্ভুত জিনিসগুলি পার্স করতে হয়, যদি কেবল সেগুলি আরও সম্মত বিন্যাসে পেতে হয়।
টিম পোস্ট

1
আর জেএসএন একই আকারের দশ মিলিয়ন অবজেক্টকে পাস করার জন্য কেবল পুরোপুরি উজ্জ্বল। অপেক্ষা কর.
ফ্রাঙ্ক শায়ারার

1
জেএসওএন এই প্রশ্নের ক্ষেত্রে সিএসভি-তে কোনও উন্নতির প্রস্তাব দেয় না এবং অনেক অ্যাপ্লিকেশনের সাথে আন্তঃব্যবযোগিতার অভাব হয় (যেমনটি বলা হয়েছে, অফিস, এসকিউএল ডিবি ইত্যাদি আমদানি বা রফতানি করতে পারে না)। জেএসএন অভ্যন্তরীণ, হালকা ওজনের ক্লায়েন্ট-সাইড ক্রিয়াকলাপের জন্য দুর্দান্ত তবে অ্যাপ্লিকেশনগুলির মধ্যে ডেটা পাস করার জন্য এক্সএমএল অনেক ভাল।
ড্যান ডিপ্লো

0

সাধারণত, আমি নিজেকে যা করতে দেখছি সেগুলি CSV ফাইলের পরিবর্তে একটি টিএসভি (ট্যাব-বিভাজিত মান) পাচ্ছে, ফাইলটি ইম্যাক্সের মধ্যে টানুন এবং দেখুন যে এটি কখনও অস্বাভাবিক কিছু অক্ষর ব্যবহার করে না (usually প্রায়শই এখানে প্রায় ভাল পছন্দ), এবং তারপরে আমি সমস্ত ট্যাবগুলিকে $ এ রূপান্তর করি $

সেখান থেকে, GNU AWK- কে ক্ষেত্র বিভাজক হিসাবে এবং বব আপনার চাচা হিসাবে ব্যবহার করতে বলা যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.