বিন্যাসটি না ভেঙে সিএসভি কলামগুলিতে কমা অন্তর্ভুক্ত করার কোনও উপায় আছে কি?


282

আমি একটি নাম এবং একটি নম্বর সহ দুটি কলাম সিএসভি পেয়েছি। কিছু লোকের নাম কমা ব্যবহার করে, উদাহরণস্বরূপ Joe Blow, CFA.এই কমাটি সিএসভি ফর্ম্যাটটি ভেঙে দেয়, যেহেতু এটি একটি নতুন কলাম হিসাবে ব্যাখ্যা করা হয়।

আমি পড়েছি এবং সর্বাধিক প্রচলিত প্রেসক্রিপশনটি মনে হয় character চরিত্রটি প্রতিস্থাপন করছে, বা ডিলিমিটারের পরিবর্তে একটি নতুন মান (উদাহরণস্বরূপ this|that|the, other)।

আমি সত্যিই কমা বিভাজক রাখতে চাই (আমি জানি এক্সেল অন্যান্য সীমানা সরবরাহকারীদের সমর্থন করে তবে অন্যান্য দোভাষীরা তা নাও পারে)। আমি নামটিতে কমা রাখতে চাই, যেমনটি Joe Blow| CFAবেশ নির্বোধ দেখাচ্ছে।

বিন্যাসটি না ভেঙে সিএসভি কলামে কমা অন্তর্ভুক্ত করার কোনও উপায় আছে, উদাহরণস্বরূপ সেগুলি এড়িয়ে গিয়ে?



লিটল হ্যাক যা আমার পক্ষে কাজ করেছে: একটি টেক্সট সম্পাদকে সিএসভি ফাইলটি খুলুন, তারপরে একটি এক্সেল ডকুমেন্টে পেস্ট করুন। আপনি যদি বড় অংশগুলিতে এটি করতে পারেন তবে কাজ করে।
জোনাস

@ জোনাস: একই টোকেনটি ডিলিমিটার বা ডেটার অংশ হিসাবে ব্যবহৃত হয়েছে কিনা তা এক্সেল অনুমান করতে পারে না। পাঠ্য সম্পাদক থেকে আটকানো তা পরিবর্তন করে না।
IInspectable

উত্তর:


370

ক্ষেত্রটি উদ্ধৃতিতে সংযুক্ত করুন, যেমন

field1_value,field2_value,"field 3,value",field4, etc...

উইকিপিডিয়া দেখুন ।

আপডেট হয়েছে :

একটি উদ্ধৃতি এনকোড করতে, ব্যবহার করুন ", একটি ক্ষেত্রে একটি ডাবল উদ্ধৃতি চিহ্ন হিসাবে এনকোড করা হবে ""এবং পুরো ক্ষেত্রটি হয়ে উঠবে """"। সুতরাং আপনি যদি উদাহরণস্বরূপ এক্সেলটিতে নিম্নলিখিতটি দেখেন:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------

সিএসভি ফাইলের মধ্যে রয়েছে:

regular_value,",,,""",","""",","""""""",""""

একটি কমাটি সহজভাবে কোটগুলি ব্যবহার করে আবদ্ধ হয়, তাই ,হয়ে যায় ","

একটি কমা এবং উদ্ধৃতি এনপ্যাপুলেট করা এবং উদ্ধৃত করা দরকার, তাই ","হয়ে যায় ""","""


4
এটি আমার পক্ষে কাজ করেছিল! আমি সিএসভিতে একটি জেএস ভেরিয়েবল রফতানি করেছিলাম, এবং প্রতিটি স্ট্রিংয়ের চারপাশে অতিরিক্ত জোড়া উদ্ধৃতি রেখেছি, "জন ব্লো, সিএফএ" সমস্যার সমাধান করতে সহায়তা করেছে, যেমনটি প্রশ্নের মধ্যে উল্লেখ করা হয়েছে।
মধুলিকা মুখার্জি

যদি প্রতিটি ঘরের ভিতরে কোট এবং কমা দুটি থাকে?
স্পিড প্লেন

2
আমি কয়েকটি উদাহরণ সহ উত্তরটি আপডেট করেছি - সংক্ষেপে, কমাগুলি উদ্ধৃতিতে আবদ্ধ করা হয় (যেমন ","), এবং উদ্ধৃতিগুলি অব্যাহতি দেওয়া হয় (যেমন """)
রায়ান

6
এখন এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি দুর্দান্ত সমাধানের প্রস্তাব দেয় যা সম্ভবত ব্যবহারের 99% ক্ষেত্রে সমাধান করে।
বুজজ

কোট-পলাতকৃত ক্ষেত্রগুলির সাথে সিএসভি ফাইলগুলি বিশ্লেষণের জন্য কি কোনও সি # গ্রন্থাগার রয়েছে?
মিন ট্রান

34

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

রেফারেন্স স্পষ্ট নথি


10
আরএফসি 4180, কমা- পৃথকীকরণকৃত মানগুলির (সিএসভি) ফাইলগুলির জন্য প্রচলিত ফর্ম্যাট এবং এমআইএমআই টাইপ , ietf.org/rfc/rfc4180.txt ; আরও একটি 'অফিসিয়াল' স্পেসিফিকেশন।
শি 16

3
বহুল ব্যবহৃত-গ্রহণযোগ্য পদ্ধতির অন্তর্ভুক্তি এটির দুর্দান্ত উত্তর দেবে। এটি যেমন দাঁড়িয়েছে, @ রায়ের উত্তর জিতেছে।
রিনোগো

16

আপনি যে কথাটি বলেছেন তা করতে চাইলে আপনি উদ্ধৃতি ব্যবহার করতে পারেন। এটার মতো কিছু

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

সুতরাং এখন, আপনি নিজের নামের পরিবর্তনশীল কমা ব্যবহার করতে পারেন।


ধন্যবাদ ক্লাউড আপনার $whatever = "\"".$name."\"";
টিপটির

সমাধানের জন্য আপনাকে ধন্যবাদ।
ভাভিন থুমার

10

আপনাকে সেই মানগুলি উদ্ধৃত করতে হবে।
এখানে আরও বিশদ বিবরণ দেওয়া হল।


2
একাধিক চশমা রয়েছে, এক্সেল প্রবেশের চারপাশে উদ্ধৃতি ব্যবহার করে, লিনাক্স ব্যাকস্ল্যাশ অক্ষর ব্যবহার করে। দুর্ভাগ্যক্রমে, আপনার পছন্দসই শ্রোতা / লক্ষ্য সিস্টেমের জন্য আপনাকে পালাতে হবে
রুদু

7

অন্যান্য উত্তরের পয়েন্টগুলি ছাড়াও: আপনি যদি এক্সেলের উদ্ধৃতি ব্যবহার করে থাকেন তবে একটি বিষয় লক্ষণীয় হ'ল আপনার স্পেসগুলির স্থান। আপনার কাছে কোডের একটি লাইন থাকলে:

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

এক্সেল প্রাথমিক উদ্ধৃতিটি কমা থেকে রক্ষা পাওয়ার পরিবর্তে আক্ষরিক উক্তি হিসাবে বিবেচনা করবে। আপনার কোডটি এতে পরিবর্তন করতে হবে

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

এই সূক্ষ্মতা আমাকে এখানে এনেছে।


3

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


2
এবং ডেটাতে "+" অক্ষর থাকলে আপনি কী করতেন?
অ্যান্ড্রু মর্টন

1
@ অ্যান্ড্রুমার্টন হ্যাঁ, এটি একটি চ্যালেঞ্জ। তবে আমার ক্ষেত্রে, আমি নিশ্চিত যে +আমার ডেটাতে মোটেই বিদ্যমান নেই। আপনার মতামত মন্তব্য করার জন্য ধন্যবাদ।
মোহাম্মদ

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

1
যদি এটি কাজ করে না, আপনি আপনার
সীমানাঙ্কিত কমাগুলির

ব্যক্তিগতভাবে আমি @ অ্যান্ড্রুমার্টনের দ্বিতীয় মন্তব্যটি এখানে পেয়েছি যা আমাকে গ্রহণযোগ্য উত্তরের চেয়ে আরও ভাল কি করতে সাহায্য করে। পদক্ষেপ 1 - ডেটা ক্ষেত্রগুলিতে ডাবল উদ্ধৃতিগুলি রক্ষা করুন, উদাহরণস্বরূপ পাইথনে: field = field.replace('"', '""')দ্বিতীয় ধাপ - 1 ধাপের পরে, ফিল্ডটি ডাবল উদ্ধৃতিতে নিজেকে আবদ্ধ করুন field = '"' + field + '"'- যেমন আপনি ভাবেন লোহা-কাস্ট।
উইল ক্রোকসফোর্ড

3

আপনার ভাষার উপর নির্ভর করে একটি to_json পদ্ধতি উপলব্ধ থাকতে পারে। এটি সিএসভিগুলিকে ভেঙে দেয় এমন অনেকগুলি বিষয় থেকে রক্ষা পাবে।


3

আমি দেখেছি ম্যাকের নম্বরের মতো কিছু অ্যাপ্লিকেশন এর আগে যদি জায়গা থাকে তবে ডাবল উক্তিটিকে উপেক্ষা করে।

a, "b,c"কাজ করার সময় a,"b,c"কাজ করে না ।


1
আপনি সম্ভবত আমাকে মাত্র এক ঘন্টা কাজ বাঁচিয়েছেন ... ধন্যবাদ!
শান314

1

আপনি আপনার মানগুলি এনকোড করতে পারেন, উদাহরণস্বরূপ পিএইচপি বেস 64৪_এনকোড ($ স্ট্র)

আইএমও এটি উদ্ধৃতি ইত্যাদির দ্বিগুণ করার চেয়ে সহজ etc.

https://www.php.net/manual/en/function.base64-encode.php

এনকোডযুক্ত মানগুলিতে কখনই কমা থাকতে পারে না তাই আপনার সিএসভিতে প্রতিটি কমা বিভাজক হবে।



0

আপনি Text_Qualifierআপনার ফ্ল্যাট ফাইল সংযোগ ব্যবস্থাপক হিসাবে ক্ষেত্রটি ব্যবহার করতে পারেন "। এটিতে আপনার ডেটাগুলি উদ্ধৃতিতে আবৃত করা উচিত এবং কেবলমাত্র উদ্ধৃতিগুলির বাইরে থাকা কমা দ্বারা পৃথক করা উচিত।


0

প্রথমত, যদি আইটেমের মানটির দ্বিগুণ উদ্ধৃতি অক্ষর (") থাকে তবে 2 টি ডাবল উদ্ধৃতি অক্ষর (" ") দিয়ে প্রতিস্থাপন করুন

item = item.ToString().Replace("""", """""")

অবশেষে, আইটেমের মান মোড়ানো:

বামদিকে: ডাবল উদ্ধৃতি অক্ষর (") সহ

ডানদিকে: ডাবল উদ্ধৃতি অক্ষর (") এবং কমা অক্ষর (,) সহ

csv += """" & item.ToString() & ""","

0

ডাবল উক্তি আমার পক্ষে কাজ করে না, এটি আমার পক্ষে কাজ করে \"। উদাহরণস্বরূপ আপনি যদি একটি ডাবল উদ্ধৃতি রাখতে চান তবে সেট করতে পারেন \"\"

আপনি সূত্রগুলি তৈরি করতে পারেন, উদাহরণস্বরূপ:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

সিএসভিতে লিখবে:

= যদি (C3 এ = 1, "", বি 3)


0

এখানে যা প্রয়োজন তা নাও হতে পারে এটি একটি পুরানো প্রশ্ন এবং উত্তরটি অন্যকে সাহায্য করতে পারে। একটি আলাদা বিভাজক সহ এক্সেলের মধ্যে আমদানি করার জন্য যে টিপটি আমি দরকারী মনে করি তা হ'ল পাঠ্য সম্পাদকটিতে ফাইলটি খুলতে এবং প্রথম লাইনে যুক্ত করা:

সেপ্টেম্বর = |

যেখানে | বিভাজনটি হ'ল আপনি এক্সেলটি ব্যবহার করতে চান। বিকল্পভাবে আপনি উইন্ডোজে ডিফল্ট বিভাজক পরিবর্তন করতে পারেন তবে কিছুটা দীর্ঘ-বায়ুযুক্ত:

কন্ট্রোল প্যানেল> ঘড়ি এবং অঞ্চল> অঞ্চল> ফর্ম্যাটগুলি> অতিরিক্ত> নম্বর> তালিকা বিভাজক [কমা থেকে আপনার পছন্দসই বিকল্পে পরিবর্তন করুন]। তার মানে এক্সেলও নির্বাচিত বিভাজক ব্যবহার করে সিএসভি রফতানি করতে ডিফল্ট হবে।

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