প্রতিটি সিএসভি রেকর্ডে ক্ষেত্রের সংখ্যা গণনা করুন


12

একটি পাঠ্য ফাইল কল্পনা করুন যেখানে প্রতিটি সিএসভি রেকর্ডে বিভিন্ন সংখ্যক ক্ষেত্র থাকতে পারে। টাস্কটি হ'ল ফাইলের প্রতিটি রেকর্ডে কত ক্ষেত্র আছে আউটপুট কোড লিখতে। আপনি ধরে নিতে পারেন যে ফাইলটিতে কোনও শিরোলেখ নেই এবং আপনি যে কোনও ফাইল বা মানক ইনপুট থেকে পড়তে পারেন choose

আপনি সিএসভি নিয়মের জন্য rfc4180 এর একটি সংস্করণ ধরে নিতে পারেন যা আমি ফাইলের প্রতিটি লাইনের সংজ্ঞার জন্য নীচে ব্যাখ্যা করব। অনুমানের সম্পর্কিত অংশটির হালকা সম্পাদনা করা সংস্করণটি এখানে:

সিএসভি ফর্ম্যাট সংজ্ঞা

  1. প্রতিটি রেকর্ড একটি পৃথক লাইনে অবস্থিত, একটি লাইন ব্রেক (সিআরএলএফ) দ্বারা বিসীমাবদ্ধ। উদাহরণ স্বরূপ:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF

  2. ফাইলের সর্বশেষ রেকর্ডটিতে শেষ পংক্তি বিরতি থাকতে পারে বা নাও থাকতে পারে। উদাহরণ স্বরূপ:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx

(বিধি ৩. এই চ্যালেঞ্জের ক্ষেত্রে প্রযোজ্য নয়)

  1. প্রতিটি রেকর্ডের মধ্যে, এক বা একাধিক ক্ষেত্র থাকতে পারে, কমা দ্বারা আলাদা। স্পেসগুলি ক্ষেত্রের অংশ হিসাবে বিবেচিত হয় এবং এড়ানো উচিত নয়।

  2. প্রতিটি ক্ষেত্র ডাবল উদ্ধৃতিতে আবদ্ধ হতে পারে বা নাও হতে পারে। ক্ষেত্রগুলি যদি ডাবল উদ্ধৃতি দিয়ে আবদ্ধ না হয় তবে ক্ষেত্রগুলির ভিতরে ডাবল উদ্ধৃতি উপস্থিত নাও হতে পারে। উদাহরণ স্বরূপ:

    "aaa","bbb","ccc" CRLF
    zzz,yyy,xxx

  3. লাইন ব্রেক (সিআরএলএফ), ডাবল উদ্ধৃতি এবং কমাগুলি সহ ক্ষেত্রগুলি ডাবল-কোটে আবদ্ধ থাকতে হবে। উদাহরণ স্বরূপ:

    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx

  4. যদি ক্ষেত্রগুলি আবদ্ধ করতে ডাবল-কোট ব্যবহার করা হয়, তবে ক্ষেত্রের অভ্যন্তরে ডাবল-উদ্ধৃতিটি অন্য একটি ডাবল উদ্ধৃতি দিয়ে পূর্ববর্তী করে পালাতে হবে। উদাহরণ স্বরূপ:

    "aaa","b""bb","ccc"

উদাহরণ

ইনপুট:

,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b 
bb","ccc","fish",""

আউটপুট দেওয়া উচিত:

2, 3, 3, 5

আপনার আউটপুট মানগুলি যে কোনও উপায়ে আপনি সবচেয়ে সুবিধাজনক মনে করতে পারেন।

লাইব্রেরি

আপনি আপনার পছন্দ মতো কোনও লাইব্রেরি ব্যবহার করতে পারেন।


এখনও অবধি দুর্দান্ত উত্তর কিন্তু আমরা একটি কমান্ড লাইন / বাশ উত্তর মিস করছি যা বিশেষত দুর্দান্ত হবে।

উত্তর:


5

স্ট্যাক্স , 19 12 বাইট

èJ§3‼}vAà○L>

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

_'"/    split *all* of standard input by double quote characters
2::     keep only the even numbered elements
|j      split on newlines (implicitly concatenates array of "strings")
m       for each line, execute the rest of the program and output
  ',#^  count the number of commas occurring as substrings, and increment

এটি চালান


1
এটা কিভাবে কাজ করে?
আনুশ

1
@ আনুশ: আমি আরও কিছু তথ্য যুক্ত করেছি।
পুনরাবৃত্তি


3

জাভাস্ক্রিপ্ট (ES2018), 42 59 বাইট

s=>s.replace(/".+?"/sg).split`\n`.map(c=>c.split`,`.length)


টেকনিক্যালি এটি ES2018 হ'ল রেগেক্সের পতাকাটির কারণে s। এটি এতটা গুরুত্বপূর্ণ নয় যে ;-) এবং এটির দুর্দান্ত ব্যবহার, বিটিডব্লিউ!
ইটিএইচ প্রডাকশনস

2
এই ফাংশনটি একবারে কেবল একটি রেকর্ডে কাজ করে। আমি মনে করি সমস্যার বিবরণে একাধিক রেকর্ডের একটি সম্পূর্ণ ফাইল পরিচালনা করা প্রয়োজন requires
পুনরাবৃত্তি

@ ইথ প্রডাকশনস, ভাল পয়েন্ট আপডেট হবে।
রিক হিচকক

@ রিসার্সিভ, আপনি ঠিক বলেছেন, ইনপুটগুলি আমি ভুল বুঝেছি। এখন আপডেট হয়েছে, অনেকগুলি বাইটের ক্ষতিতে ।
রিক হিচকক

3

জেলি , 12 বাইট

ṣ”"m2FỴ=”,§‘

পুনরাবৃত্তির স্ট্যাক্স উত্তর একটি বন্দর - ক্রেডিট দিতে যান!

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

ṣ”"m2FỴ=”,§‘ - Link: list of characters, V
 ”"          - a double quote character = '"'
ṣ            - split (V) at ('"')
   m2        - modulo slice with two (1st, 3rd, 5th, ... elements of that)
     F       - flatten list of lists to a list
      Ỵ      - split at newlines
        ”,   - comma character = ','
       =     - equal? (vectorises)
          §  - sum each
           ‘ - increment (vectorises)
             - (as a full program implicit print)

হতে পারে আপনি পছন্দ করেন ṣ”"m2ẎỴċ€”,‘- এটি কড়া এবং ċ€প্রতিটিটিতে কমা গণনা করে।


2

পাইথন, 63 বাইট

import csv
def f(s):return map(len,csv.reader(s.split("\n"))

পুনরাবৃত্তিযোগ্য mapবস্তুর আউটপুট ফেরত দেয় ।


2
একটি lambdaফাংশন ব্যবহার করে আপনি এটিকে 54 বাইটে
ovs

@ ওভগুলি আমি বিধিগুলি নাও বুঝতে পারি তবে আপনার টিআইও মনে হয় ইনপুটটি প্রস্তুত করেছে। এটা কি সত্যিই বৈধ?
আনুশ

আমি দেখতে পাচ্ছি কেন এটি এখন কাজ করে (কেবলমাত্র @ ASCII- এর জন্য ধন্যবাদ)
আনুশ



2

জাভা 10, 101 বাইট

s->{for(var p:s.replaceAll("\"[^\"]*\"","x").split("\n"))System.out.println(p.split(",",-1).length);}

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

s->{                                    // Method with String parameter and no return-type
  for(var p:s.replaceAll("\"[^\"]*\"","x") 
                                        //  Replace all words within quotes with an "x"
             .split("\n"))              //  Then split by new-line and loop over them:
    System.out.println(p.split(",",-1)  //   Split the item by comma's
                        .length);}      //   And print the length of this array

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